我有一个数组数组。每个嵌套数组都包含对象,但是它可能包含对象数组。例如:
let arr=[[{a:1}],[{b:2}, [{c:3}, {d:4}]]]
我想创建一个数组,该数组仅包含破坏所有数组的对象。我尝试过
arr.reduce((a,b) => [...a,...b], [])
但是我得到的是:
[{a:1}, {b:2}, [{c:3},{d:4}]]
这不是我想要的。 我想得到:
[{a:1}, {b:2}, {c:3}, {d:4}]
答案 0 :(得分:4)
您应该考虑使用Array.flat()
方法。
console.log( [[{a:1}],[{b:2}, [{c:3}, {d:4}]]].flat() )
您会注意到上面的示例仅将一个级别展平。这是因为depth
参数默认为1
。在我们的情况下,我们需要展平2个级别,因此我们将2
显式传递给.flat()
。
console.log( [[{a:1}],[{b:2}, [{c:3}, {d:4}]]].flat(2) )
如果需要它进一步深入,可以增加此数字。如果需要它来处理任何深度,请使用Infinity
。
console.log( [[{a:1}],[{b:2}, [{c:3}, {d:4}]]].flat(Infinity) )
值得注意的是,在撰写此答案时flat()
is not supported by all browsers。但是,大多数编译器(例如Babel)都会对其进行填充,而NodeJS 11+支持它。 Array.flat()
的MDN文档包含alternatives that use vanilla Javascript。