为什么这种用于深度展平数组的常见JavaScript方法不能通用



我遇到了一个有趣的代码挑战:"创建一个函数,该函数接受一个数组并返回数组中所有项的总和">

我的解决方案是:

function sumArray(arr) {
var merged = [].concat.apply([], arr);
var sum = 0;
merged.forEach(function(item) {
sum = sum + item;
});
return sum;
}

问题是上述解决方案对于sumArray([1, [2, [1]], 3]), 7失败,因为扁平化方法不够深入。具体地,在上述情况下,console.log(merged)[1, 2, [1], 3]

什么样的压平方法可以达到必要的深度?

使用具有无限深度的数组#flat((,如果已知,则使用实际深度。

function sumArray(arr) {  
return arr.flat(Infinity).reduce((a,b) => a+b)
}
console.log(sumArray([1, [2, [1]], 3]))

最新更新