为什么这种用于深度扁平化数组的通用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];

哪种平整方法会尽可能深入?

解决方法

使用Array#flat()具有无限的深度,或者使用已知的实际深度。

function sumArray(arr) {  
   return arr.flat(Infinity).reduce((a,b) => a+b)
}

console.log(sumArray([1,[2,[1]],3]))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...