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

标签 javascript lodash

我有以下代码:

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

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

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

最佳答案

使用函数式助手,所有解决方案的效率都低于“命令式”:

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;
}, {});

关于javascript - 如何在 lodash forEach 中创建回调函数来填充数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21450360/

相关文章:

javascript - ColdFusion 的 listFindNoCase 函数在 Javascript 中最快的实现是什么?

javascript - 上传时 Azure blob 的名称/文件名

javascript - 使用 Web api 和 Angular JS 将数据下载为 Excel 文件

javascript - 使用lodash比较锯齿状数组(项目无序存在)

javascript - 使用 lodash _.sortby 对包含详细信息的联系人数组进行排序并最后发送空值?

javascript - 递归地过滤数组寻找 parent

javascript - 为什么当用户点击太快时 jQuery Mobile Simple Dialogue 会卡住?

javascript - 从转换为 ISO 字符串的日期中删除秒/毫秒

javascript - 根据对象数组中的值计算字符串的出现次数

javascript - 如何通过id查找对象?