如何在JavaScript中解构数组的数组?

时间:2019-07-01 15:51:27

标签: javascript

我有一个数组数组。每个嵌套数组都包含对象,但是它可能包含对象数组。例如:

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}]   

1 个答案:

答案 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