javascript - Node.js + 对象数组

标签 javascript node.js

在我的 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/

相关文章:

javascript - 获取具有值的系列中最后一个输入字段的索引

javascript - 装饰器在 Nest Controller 中返回 404

node.js - 将 Mongo 输出与 Node 结合起来用于 API

mysql - Nodejs 在函数执行之间等待

javascript - 类型 'X' 的参数不可分配给类型 'Y' 的参数

javascript - 使用 websocket 在浏览器和 java SE 项目之间传递数据

javascript - 多选组获取值

javascript - jquery改变下一页的CSS

javascript - 如何使用 Sinon stub "wrapper"函数?

javascript - jQuery如何在到达容器末尾时捕捉到容器