我有一个数组数组。每个嵌套数组都包含对象,但它可能包含对象数组。例如:
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}]
最佳答案
您应该考虑使用 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)都会对其进行 polyfill,并且 NodeJS 11+ 支持它。 Array.flat()
的 MDN 文档有 alternatives that use vanilla Javascript .
关于javascript - 如何在 JavaScript 中解构数组数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56838686/