VoA*_*VoA 5 javascript arrays loops sum multidimensional-array
假设我有这个:
function arrSum(){
*code here*
}
Run Code Online (Sandbox Code Playgroud)
如何编写arrSum函数,使其可以对多维数组(可变深度)中的所有整数求和.
即
arrSum([2, 5, [4, 6], 5]) === 22;
Run Code Online (Sandbox Code Playgroud)
我知道某个地方肯定有答案,但我真的找不到它.如果这是重复,请告诉我.
只需用递归就可以编写这样的函数
function arrSum(arr) {
var sum = 0;
// iterate array using forEach, better to use for loop since it have higher performance
arr.forEach(function(v) {
// checking array element is an array
if (typeof v == 'object')
// if array then getting sum it's element (recursion)
sum += arrSum(v);
else
// else adding the value with sum
sum += v
})
// returning the result
return sum;
}
console.log(arrSum([2, 5, [4, 6], 5]) === 22);Run Code Online (Sandbox Code Playgroud)
使用for循环
function arrSum(arr) {
var sum = 0;
for (var i = 0; i < arr.length; i++) {
if (typeof arr[i] == 'object')
sum += arrSum(arr[i]);
else
sum += arr[i];
}
return sum;
}
console.log(arrSum([2, 5, [4, 6], 5]) === 22);Run Code Online (Sandbox Code Playgroud)
使用更现代的方法.reduce():
const arr = [2, 5, [4, 6], 5];
const arrSum = array =>
array.reduce(
(sum, num) => sum + (Array.isArray(num) ? arrSum(num) : num * 1),
0
);
console.log(arrSum(arr));Run Code Online (Sandbox Code Playgroud)
为什么没有人使用flat()?
const arr = [2, 5, [4, 6], 5];
const result = arr.flat().reduce((a,b) => a+b);
console.log(result);Run Code Online (Sandbox Code Playgroud)