在我的 Node 应用程序中,我必须从另一个对象数组构造一个对象数组。
将我的对象数组视为..
[ { id_0: 356, id_1: 33, name_1: 'aaaa' },
{ id_0: 756, id_1: 89, name_1: 'bbbbb' },
{ id_0: 456, id_1: 89, name_1: 'ccccc' },
{ id_0: 356, id_1: 27, name_1: 'dddd' } ]
我必须构造一个对象数组,如下所示:
[{
"356":["33":"aaaa","27":"ddddd"],------------->Changes made
"456":[{"89":"cccc"}],
"756":[{"89":"bbbbbbbb"}]
}]
我尝试使用 async.map。但我无法找到正确的方法。请帮助我解决这个问题。提前致谢...
最佳答案
您可以使用 Array.prototype.reduce
函数,如下所示
console.log(data.reduce(function(result, current) {
var obj = {};
result[current.id_0] = result[current.id_0] || [];
obj[current.id_1] = current.name_1;
result[current.id_0].push(obj);
return result
}, {}));
输出
{ '356': [ { '33': 'aaaa' }, { '27': 'dddd' } ],
'456': [ { '89': 'ccccc' } ],
'756': [ { '89': 'bbbbb' } ] }
如果你想将其转换为对象数组,只需将 data.reduce
的结果用 []
包装起来,如下所示
console.log([data.reduce(function(result, current) {
...
...
}, {})]);
编辑:
result[current.id_0] = result[current.id_0] || [];
此行确保 result[current.id_0]
是一个数组。如果 result[current.id_0]
的值为 true,则返回该值,如果不是,则返回 []
。因此,将创建一个新数组并将其分配给 result[current.id_0]
。它实际上是
if (result.hasOwnProperty(current.id_0) === false) {
result[current.id_0] = [];
}
编辑2:如果你想将分组的元素保留为一个对象,你可以这样做
console.log(data.reduce(function(result, current) {
result[current.id_0] = result[current.id_0] || {};
result[current.id_0][current.id_1] = current.name_1;
return result
}, {}));
输出
{ '356': { '27': 'dddd', '33': 'aaaa' },
'456': { '89': 'ccccc' },
'756': { '89': 'bbbbb' } }
关于javascript - Node.js + 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22954469/