首页 > 解决方案 > 将对象嵌套数组合并到一个新数组中

问题描述

鉴于下面的对象,我正在寻找一种干净有效的方法来从每个项目的“subItems”数组创建一个数组。

const items = [{
    'a': 'a1',
    'b': 'b1',
    'subItems': [
        {'c': 'c1'},
        {'d': 'd1'}
    ]
  },
  {
    'e': 'e1',
    'subItems': [
      {'f': 'f1'},
      {'g': 'g1'}
    ]
  }
];

所以对于这个例子,我需要的结果是:

const groupedSubItems = [{c: c1},{d:d1},{f:f1},{g:g1}];

目前我只是循环并连接所有数组,但感觉不是处理这个问题的最佳方法:

let groupedSubItems = [];
items.forEach(function(item) {
  if (item.subItems) {
    groupedSubItems = groupedSubItems.concat(item.subItems);
  }
});

注意:所有子项数组将仅向下一层,如图所示,具有相同的键,并且可能存在也可能不存在。

标签: javascriptarrays

解决方案


您可以使用concatwith spread 语法和map方法来创建子项数组。

const items = [{"a":"a1","b":"b1","subItems":[{"c":"c1"},{"d":"d1"}]},{"e":"e1","subItems":[{"f":"f1"},{"g":"g1"}]}]

const subItems = [].concat(...items.map(({subItems}) => subItems || []));
console.log(subItems)


推荐阅读