深度数组上的 JavaScript 深度传播运算符

标签 javascript

我有一个很深的数组,因此数组的子数组如下所示:

const deepArray = ['1',[['a'],['b']],[2],[[[['4',[3,'c']]]],[5]]];

我想将所有末尾子级设置在一个平面数组中,我使用 ES6spread operator 但它的传播很浅,我不知道如何将它们放在下面:

const shallowArray = ['1','a','b',2,'4',3,'c',5];

也许递归函数可以做到,但是怎么做呢?它应该非常优化,因为我想在 react native 项目中使用它。我担心崩溃,所以我对优化非常谨慎。

最佳答案

使用Array.prototype.flat展平数组,然后根据需要使用扩展运算符。

如果您知道数组深度或深度的最大大小,请使用以下代码:

const flatArray = deepArray.flat(7); // assume you know depth size is 7

如果你不知道深度,你可以使用递归方法,使用reduce函数,使用如下:

 const deepFlatten = arr =>
         arr.reduce(
           (acc, val) =>
             Array.isArray(val) 
               ? acc.concat(deepFlatten(val)) 
               : acc.concat(val),
             []
         );

使用上面的函数来平坦化不确定的深度:

const flatArray = deepFlatten(deepArray);

关于深度数组上的 JavaScript 深度传播运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52817047/

相关文章:

javascript - Vue.js 更新仅在其他属性更改时才有效?

javascript - 在显示选项卡之前防止整页闪烁

javascript - 根据 LESS/Javascript 中的条件对常见的 css 规则进行分组?

javascript - react 原生 "Invariant Violation: Module AppRegistry is not a registered callable module (calling runApplication)"

javascript - 多页面js应用的集中代码

JavaScript 查询字符串

JavaScript 继承

javascript - 使用 Javascript 单击更新 Canvas 绘图

javascript - 网站热力图如何获取准确数据?

javascript - 有没有优化javascript的工具?