我有以下结构:
myArr: [ { key1: 'foo', myArr: [ { a: 'blah' } { a: 'blah2'} ], }, { key1: 'foo2', } ...More similar entries ];
我正在寻找一种有效的方法将子数组提取到单独的数组中。子数组与父数组具有相同的键。子数组可能存在,也可能不存在。
我可以在一个循环中迭代它们,并手动将它们添加到一个新的数组(如果它们存在的话)。
如果在这种特殊情况下可能的话,我更愿意使用某种映射/过滤器。
我追求的结果是:
myArr: [ { a: 'blah' }, { a: 'blah2'}, { a: 'blahN'} ],
实现这一点的一个巧妙方法就是减少初始数组:
let result = myArr.reduce((a,b) => a.concat(b.myArr || []), []);
它从一个空数组开始,只将选定的属性连接到其中,从而生成一个对象数组。如果子阵列是 undefined 否则,我们可以 concat 空数组(实际上不会向原始数组添加任何内容)
undefined
concat