我有一个对象列表:
[Object { name="abc", id=12, addr="random addr 0"}, Object { name="def", id=76, addr="random addr 1"}]
我想要的是什么:
name -> id
Object { abc=12, def=76}
我拥有的东西:
for (var i in list){
res[list[i].name]=list[i].id;
}
我的问题:
有更好的方法吗?
答案 0 :(得分:1)
对于数组上的大多数索引操作,有更好的选择(例如带有map(),reduce()等的表达式)。在这种情况下,我建议使用reduce():
var s = [{ name:"abc", id:12, addr:"random addr 0"},
{ name:"def", id:76, addr:"random addr 1"}];
s.reduce( function( acc, next) {
acc[next.name] = next.id;
return acc;
}, {} )
给出
Object {abc: 12, def: 76}
答案 1 :(得分:1)
迭代所有列表项并将属性添加到目标对象。
var res = {};
list.forEach(function(item){
return res[item.name] = item.id;
});
或类似于对象的一般数组
var res = {};
Arrays.prototype.forEach.call(list, function(item){
return res[item.name] = item.id;
});
或在旧学校迭代
var res = {};
for(var i = 0; i < list.length; i++){
return res[list[i].name] = list[i].id;
});
答案 2 :(得分:0)
另一种变体,使用 JQuery map 函数($ .map)
var list = [{ 'name':"abc", 'id':12, 'addr':"random addr 0"},
{ 'name':"def", 'id':76, 'addr':"random addr 1"}];
var result = {};
$.map(list,function (i){ result[i.name] = i.id})
console.log(result);
输出:
Object {abc: 12, def: 76}
答案 3 :(得分:-1)
你可以使用jquery .map
我做了如下
var PAIDs = SU.Details.Actions.map(function (pa) { return pa.id; });
给了我一个只有id
的对象数组