我有一个数组数组。每个嵌套数组都包含对象,但它可能包含对象数组。例如:
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)
您应该考虑使用该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 的替代方案。
| 归档时间: |
|
| 查看次数: |
1814 次 |
| 最近记录: |