在多维数组javascript中求和所有整数

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)

我知道某个地方肯定有答案,但我真的找不到它.如果这是重复,请告诉我.

Pra*_*lan 8

只需用递归就可以编写这样的函数

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)


rya*_*uen 5

使用更现代的方法.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)


zeh*_*zeh 5

为什么没有人使用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)