我有一个很深的数组,因此数组的子数组如下所示:
const deepArray = ['1',[['a'],['b']],[2],[[[['4',[3,'c']]]],[5]]];
我想将所有末尾子级设置在一个平面数组中,我使用 ES6
的 spread 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/