从数组创建多维对象,将此数组中的值指定为新对象中的键

时间:2015-12-06 12:00:43

标签: javascript jquery

我有一个这样的数组(每个包含两个以上的键值对,我只使用2个问题)

[{"name":"Joe", "id":17}, {"name":"Bob", "id":17}, {"name":"Carl", "id": 35},{"name":"son", "id": 31},{"name":"smith", "id": 29},{"name":"tom", "id": 35}]

我想像这样设置一个多维对象。 对于每个DISTINC" id"在这个" id"包含" id"," name"价值观。

{
'17' : {
    {"name":"Joe",
    "id":17},
    {"name":"Bob",
    "id":17}
},
'35' : {
    {"name":"Carl", "id": 35},
    {"name":"tom", "id": 35}
},
'31':{"name":"son", "id": 31}
},
 '29':{"name":"smith", "id": 29}
}

如你所见,我想分配不同的" id"作为第一个对象的关键

我想我可能会滥用括号,对不起,请在此纠正我。

3 个答案:

答案 0 :(得分:2)

我懒惰并使用csh.whynot。它有一个名为underscore的函数,可以完全满足您的需求:

_.groupBy(arr, 'id');

groupBy

答案 1 :(得分:0)

为什么不填充新对象?

var obj = {};

var arr = [{"name":"Joe", "id":17}, {"name":"Bob", "id":17}, {"name":"Carl", "id": 35},{"name":"son", "id": 31},{"name":"smith", "id": 29},{"name":"tom", "id": 35}];

arr.forEach(function(k) {
   obj[k.id] = k;
})

答案 2 :(得分:0)

循环数据并将其添加到新对象或附加它,具体取决于它是否已存在。



var data = [{"name":"Joe", "id":17}, {"name":"Bob", "id":17}, {"name":"Carl", "id": 35},{"name":"son", "id": 31},{"name":"smith", "id": 29},{"name":"tom", "id": 35}];

var new_data = {};

for (var i=0; i<data.length; i++)
{
    if (new_data.hasOwnProperty(data[i].id))
        new_data[data[i].id].push(data[i]);
    else
        new_data[data[i].id] = [data[i]];
}
document.getElementById("new_data").textContent = JSON.stringify(new_data, null, 4);
&#13;
<pre id="new_data"></pre>
&#13;
&#13;
&#13;