2016-08-05 4 views
0

誰かがこれを見て、これをネイティブJSにする方法を理解することができます。アンダースコアのメソッドをES6に返す

_.chain(polls).deepClone().indexBy("id").value() 

私はdeepCloneを見上げてみました、それはどこから来るのかを見つけることができませんでした。これは私が引き継ぎ、それにあまり慣れていないコードです。手伝ってくれてありがとう。ここで

は、私が持っている実施例である:

function loadPolls() { 
    return ScheduledEventService.getPolls($scope.webcastId) 
     .then(function(polls){ 
      $scope.originalPolls = _.chain(polls).deepClone().indexBy("id").value(); 
      $scope.webcast.polls = polls; 

      _.each(polls, function(poll){ 
       poll.answers = _.map(_.range(Polls.MaxAnswers), function(i){ 
        return (poll.answers && poll.answers[i]) || {}; 
       }); 

       poll.readOnly = poll.status !== "Closed" || poll.totalResponses > 0; 
      }); 
     }); 
} 
+0

-1で大丈夫です。その理由は? – pertrai1

+1

実例を提供できますか? –

+0

@PratikParekh - 私が援助したことが助けてくれることを願っています – pertrai1

答えて

1

deepCloneindexBy(アンダースコアからの)どちらが直接ネイティブ同等物を持っています。

indexByは十分に簡単です:

function indexBy(object, key) { 
    return Object.keys(object).reduce(result, k) { 
    const value = object[k]; 
    result[value[key]] = value; 
    return result; 
    }); 
} 

これは、入力オブジェクトを歩く(実際には、そのキーを歩く)、およびそのキーのidプロパティの値ですresultオブジェクトを構築するためにreduceを使用しています各サブオブジェクトは、値がサブオブジェクト自体であるため、_.indexByと同じです。

deepCloneのバージョンを見つける必要があります。ここには多くのものがあります。

あなたがそれらを持っていたら、あなたのロジックが深いクローニングの唯一のレベルが必要な場合は、あなたが

result[value[key]] = Object.assign({}, value); 

に上記の行を変更してからちょうど

を行うことができ、単に

indexBy(deepClone(polls), 'id') 

です

indexBy(polls, 'id') 
関連する問題