如何在lodash forEach填充数组中创建回调函数?

时间:2014-01-30 07:35:19

标签: javascript lodash

我有以下代码:

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

有人可以告诉我如何使用_.lodash forEach实现这一点吗?我查看了文档,但我不确定如何实现回调函数,因此它创建了一个数组。

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

1 个答案:

答案 0 :(得分: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;
}, {});