下划线.js:使用对象中找到的键从对象列表中创建映射
Underscore.js: create a map out of list of objects using a key found in the object
我正在使用优秀的下划线.js库。我有一个特定的任务,我可以使用JavaScript或jQuery做得很好,但想知道Underscore中是否有某种可用的抽象,但我错过了。
本质上我有一个这样的对象——
var some_object_array = [{id: "a", val: 55}, {id: "b", val: 1}, {id: "c", val: 45}];
我想把它转换成——
var some_map = {"a": {id: "a", val: 55}, "b": {id: "b", val: 1}, "c": {id: "c", val: 45}};
我知道我可以使用_.groupBy(some_object_array, "id")
.但这会返回这样的地图 -
var some_grouped_map = {"a": [{id: "a", val: 55}], "b": [{id: "b", val: 1}], "c": [{id: "c", val: 45}]};
请注意,这执行了广告中要执行的操作。但我希望在不自己迭代对象的情况下获得some_map
。
任何帮助表示赞赏。
对于它的价值,既然下划线.js你现在可以使用它_.object()
var some_map = _.object(_.map(some_object_array, function(item) {
return [item.id, item]
}));
对于
您的情况,您应该使用 indexBy
函数:
var some_object_array = [{id: "a", val: 55}, {id: "b", val: 1}, {id: "c", val: 45}];
var some_grouped_map = _.indexBy(some_object_array, 'id');
还有这个方法
_.reduce(data, function (o, item) { o[item.key] = item.value; return o }, {})
这是一个语句,内部函数中有两个语句。
我认为没有比 groupBy 更接近您的需求的东西。即使有,也不会比一个简单的更好:
var some_map = {};
_.each(some_object_array, function(val) {
some_map[val.id] = val;
});
在这种情况下,您不需要迭代数组。不map
,不reduce
,不transform
。您所需要的只是旧pluck
_.object(_.pluck(some_object_array, 'id'), some_object_array);
对于 ES6,它是
var some_map = _.chain(some_object_array)
.map(item => [item.id, item])
.object()
.value()
相关文章:
- 如何使用json将对象列表从java转换为javascript
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- 如何从类关系中检索对象列表
- 从Javascript动态构建JSON对象列表
- 如何在JSP中对对象列表进行排序
- 什么'是从对象列表中一次编辑一个对象的正确Angular/Firebase方法
- 无法将对象列表从视图模型设置为 javascript 变量
- 如何将对象插入对象列表的开头,当它有 unshift 不是函数错误
- 下划线,将对象列表转换为对象值数组
- 以有效的方式搜索对象列表 mongo
- 如何将对象列表传递到MVC4中的控制器方法
- 为什么更改对象列表中的类名会将iten从列表中删除
- 遍历对象列表
- 将JSON对象列表传递给操作
- 如何从控制器返回对象列表并使用JQuery(SpringMVC,ajax)显示它们
- 从jQuery数组或元素的对象列表中选择第N个项目
- 将jsp对象列表分配给javascript数组
- Javascript:将对象列表转换为关联数组