首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Underscore.js:使用在对象中找到的键在对象列表之外创建映射

Underscore.js:使用在对象中找到的键在对象列表之外创建映射
EN

Stack Overflow用户
提问于 2012-05-02 23:04:16
回答 6查看 58.9K关注 0票数 60

我正在使用优秀的Underscore.js库。我有一个特定的任务,我可以使用JavaScript或jQuery很好地完成,但我想知道下划线中是否有某种我遗漏的抽象。

从本质上讲,我有一个这样的对象-

代码语言:javascript
复制
var some_object_array = [{id: "a", val: 55}, {id: "b", val: 1}, {id: "c", val: 45}];

我想把它转换成-

代码语言:javascript
复制
var some_map = {"a": {id: "a", val: 55}, "b": {id: "b", val: 1}, "c": {id: "c", val: 45}};

我知道我可以使用_.groupBy(some_object_array, "id")。但是这会返回一个这样的地图-

代码语言:javascript
复制
var some_grouped_map = {"a": [{id: "a", val: 55}], "b": [{id: "b", val: 1}], "c": [{id: "c", val: 45}]};

请注意,这做了广告所要做的事情。但我希望自己不用遍历对象就能得到some_map

感谢您的帮助。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-10-12 12:01:24

值得注意的是,既然是underscore.js,现在就可以使用_.object()

代码语言:javascript
复制
var some_map = _.object(_.map(some_object_array, function(item) {
   return [item.id, item]
}));
票数 90
EN

Stack Overflow用户

发布于 2014-06-02 20:43:46

对于您的情况,您应该使用indexBy函数:

代码语言:javascript
复制
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');
票数 49
EN

Stack Overflow用户

发布于 2012-10-09 05:58:26

还有一种方法

代码语言:javascript
复制
_.reduce(data, function (o, item) { o[item.key] = item.value; return o }, {})

这是内部函数中的一条语句和两条语句。

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10416424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档