javascript - 使用 ES6 基于属性将 javascript 对象数组转换为数组的键值对

标签 javascript arrays typescript object

假设我有以下对象数组:

myArray = [
  {name: 'First', parent: 1, delta: 2},
  {name: 'Second', parent: 1, delta: 1},
  {name: 'Third', parent: 2, delta: 1}
];

我想将此数组转换为一个对象,其中包含父对象的键和对象的值。例如:

result = {
  1: [
       {name: 'First', parent: 1, delta: 2},
       {name: 'Second', parent: 1, delta: 1}
     ],
  2: [
       {name: 'Third', parent: 2, delta: 1}
     ]
}

我可以使用 forEach 或嵌套循环来完成此操作,但我想知道是否有一种方法可以使用 ES6 语法来更简洁/内联地完成此操作,这将允许我做一些事情比如在 delta 上排序,等等。

最佳答案

您可以为此使用 Array.reduce():

let myArray = [{
    name: 'First',
    parent: 1,
    delta: 2
  },
  {
    name: 'Second',
    parent: 1,
    delta: 1
  },
  {
    name: 'Third',
    parent: 2,
    delta: 1
  }
];
var res = myArray.reduce((acc, item) => {
  if (acc[item.parent]) {
    acc[item.parent].push(item);
  } else {
    acc[item.parent] = [item];
  }
  return acc;
}, {});
console.log(res);

关于javascript - 使用 ES6 基于属性将 javascript 对象数组转换为数组的键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53007085/

相关文章:

javascript - PHP 表自动更新数据但不更新表

C - 使用指针将一个字符数组的内容复制到另一个

java - 将二维数组转换为一维数组

javascript - 动态构建表达式以过滤 Javascript 数组

javascript - 比较两个 JSON 并创建具有共同值的 json

javascript - 将 iframe 传递给 SPA 中的不同组件(类似于 Youtube)

javascript - vscode 响铃键盘快捷键

javascript - 如何验证 2 个选择框中相同的选定值

angular - 使用 Chartjs Angular 按值排序和隐藏图例项

typescript - Angular 2 - 在下拉列表中设置选定值