从数组创建多维对象,将该数组中的值指定为新对象中的键
create multidimensional object from array assigning a value from this array as key in the new object
我有一个这样的数组(每个数组包含2个以上的键值对,我只使用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"作为密钥
我想我可能会滥用括号,很抱歉,也请纠正我的错误。
我会很懒,使用underscore
。它有一个名为groupBy
的函数,它可以满足您的需求:
_.groupBy(arr, 'id');
JSFiddle。
对数据进行循环,并将其添加到新对象或附加它,具体取决于它是否已经存在。
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);
<pre id="new_data"></pre>
为什么不直接填充一个新对象?
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;
})
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在Javascript中转换对象数组
- 在JavaScript中通过索引从对象数组中获取值
- Backbone虹吸以获取对象数组
- 如何在DataTables 2.1中迭代对象数组
- Javascript-根据赋值顺序,按键合并对象数组
- 将事件附加到对象/数组
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript在数组中获取对象数组中键的所有不同值
- 在对象数组中查找多个值的d3范围
- Undercore.js获取对象数组中键对象的值
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何通过json对象数组为嵌套对象赋值
- 如何循环通过2个对象数组并通过匹配id进行合并
- 为对象数组创建列表项
- 如何使用javascript合并两个对象数组
- JSON到对象数组,并向每个对象添加项
- JavaScript:从对象数组中获取唯一值及其计数
- 按不同项目对对象数组进行排序