如何展平嵌套数组?

时间:2020-10-27 17:20:25

标签: javascript

如何展平数组中的嵌套数组?

这是示例输入数组,

const input = [
{
   id: 1,
   name: 'Charles',
   otherFields: [{
       id: 2,
       name: 'Pung',
   }, {
       id: 3,
       name: 'James',
   }]
}, {
   id: 4,
   name: 'Charles',
   otherFields: [{
       id: 5,
       name: 'Pung',
   }, {
       id: 6,
       name: 'James',
   }]
}

]

我想要获得的输出数组。

[{
   id: 1,
   name: 'Charles'
}, {
   id: 2,
   name: 'Pung',
}, {
   id: 3,
   name: 'James',
}, {
   id: 4,
   name: 'Charles'
}, {
   id: 5,
   name: 'Pung',
}, {
   id: 6,
   name: 'James',
}]

我想以某种方式在一条语句中获得输出

input.map((sth) => ({...sth??, sth.field...})); // I'm not sure :(

2 个答案:

答案 0 :(得分:4)

使用flatMap,您可以取出otherFields属性,并返回一个包含父项和另一个数组的数组:

const input = [{
  id: 1,
  name: 'Charles',
  otherFields: [{
    id: 2,
    name: 'Pung',
  }, {
    id: 3,
    name: 'James',
  }]
}];
console.log(
  input.flatMap(({ otherFields, ...item }) => [item, ...otherFields])
);

答案 1 :(得分:1)

对于多个级别,您可以采用递归展平方法。

const
    flat = ({ otherFields = [], ...o }) => [o, ...otherFields.flatMap(flat)],
    input = [{ id: 1, name: 'Charles', otherFields: [{ id: 2, name: 'Pung' }, { id: 3, name: 'James', otherFields: [{ id: 4, name: 'Jane' }] }] }],
    result = input.flatMap(flat);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }