问题描述
我遇到了一个有趣的代码挑战:“创建一个接受数组并返回数组中所有项目之和的函数。”
我的解决方法是:
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]))