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

Unk*_*per 0 javascript

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

let arr=[[{a:1}],[{b:2}, [{c:3}, {d:4}]]]
Run Code Online (Sandbox Code Playgroud)

我想创建一个只包含解构所有数组的对象的数组。我试过

arr.reduce((a,b) => [...a,...b], [])
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

[{a:1}, {b:2}, [{c:3},{d:4}]]
Run Code Online (Sandbox Code Playgroud)

这不是我想要的。我想得到:

 [{a:1}, {b:2}, {c:3}, {d:4}]   
Run Code Online (Sandbox Code Playgroud)

Sov*_*iut 9

您应该考虑使用该Array.flat()方法。

console.log( [[{a:1}],[{b:2}, [{c:3}, {d:4}]]].flat() )
Run Code Online (Sandbox Code Playgroud)

你会注意到上面的例子只展平了一层。这是因为depth参数默认为1。在我们的例子中,我们需要展平 2 个级别,所以我们明确地传递2.flat()

console.log( [[{a:1}],[{b:2}, [{c:3}, {d:4}]]].flat(2) )
Run Code Online (Sandbox Code Playgroud)

如果你需要它更深入,你可以增加这个数字。如果您需要它来处理任何深度,请使用Infinity.

console.log( [[{a:1}],[{b:2}, [{c:3}, {d:4}]]].flat(Infinity) )
Run Code Online (Sandbox Code Playgroud)

值得注意的是,截至撰写此答案时,flat() 并非所有浏览器都支持。但是,大多数转译器(例如 Babel)都会对它进行 polyfill,并且 NodeJS 11+ 支持它。MDN 文档中Array.flat()使用 vanilla Javascript 的替代方案