使用Javascript或JQuery从对象列表中获取所有值

时间:2014-06-06 22:04:35

标签: javascript jquery arrays

我有一个对象列表:

[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;
}

我的问题:

有更好的方法吗?

4 个答案:

答案 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

的对象数组