1

次のコードがあります。

$scope.option.cityMap = data.reduce(function (rv, v) {
                       rv[v.cityId] = v;
                       return rv;
                   }, {});

_.lodash forEach でこれを実装する方法を教えてもらえますか? ドキュメントを見ましたが、コールバック関数を実装する方法がわからないため、配列が作成されます。

$scope.option.cityMap = _.forEach(data, 
4

1 に答える 1

1

関数ヘルパーを使用すると、すべてのソリューションは「命令型スタイル」よりも効率が低下します。

var cityMap = {};
var len = data.length;
for (var i = 0; i < len; i++) {
  cityMap[data[i].cityId] = data[i];
}
// return cityMap;

パフォーマンスが本当に問題になる場合は、上記の関数を作成します。外部から見ると、純粋で機能的です (データ入力、データ出力、副作用なし)。

次のものも使用できます_.zipObject

var cityMap = _(data).map(data, function (v) {
  return [v.cityId, v];
}).zipObject().value();

またはreduce、アキュムレータをコピーしていないrv(ある意味でごまかしている) ため、これも非常に効率的です。

var cityMap = _.reduce(data, function (rv, v) {
  rv[v.cityId] = v;
  return rv;
}, {});
于 2014-01-30T08:33:31.250 に答える