为什么这种常用的 JavaScript 深度扁平化数组的方法不能普遍使用?
Why does this common JavaScript method to deeply flatten arrays not work universally?
我 运行 参与了这个有趣的代码挑战:“创建一个接受数组和 returns 数组中所有项的总和的函数。”
我的解决方案是:
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]))
我 运行 参与了这个有趣的代码挑战:“创建一个接受数组和 returns 数组中所有项的总和的函数。”
我的解决方案是:
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]))