JavaScript 递归循环对嵌套数组中的所有整数求和

use*_*550 1 javascript recursion for-loop

arr将是一个数组,包含整数、字符串和/或像它本身一样的数组。将数组嵌套中任意位置找到的所有整数相加。

这是我想出来的,但仍然不正确

function arraySum(arr) {
  var sum = 0;
  var sum1 = 0;

  for (var i = 0; i < arr.length; i++) {
    if (arr[i] === Math.round(arr[i])) { //check if its an integar
      sum += arr[i];
    }  
    if (arr[i] instanceof Array) {
      for (var n = 0; n < arr[i].length; n++) {
        sum1 += arr[i][n];
      }
    }
  }
  console.log(sum + sum1);
}

var sumArr = [[[[[[[[[1]]]]]]]], 1]; // => 101. SHOULD BE 2
arraySum(sumArr);
Run Code Online (Sandbox Code Playgroud)

Jos*_*yer 6

function arraySum(arr) {
  var sum = 0;
  for (var i = 0; i < arr.length; i++) {
     if (arr[i] instanceof Array) { sum += arraySum(arr[i]);}
     if (arr[i] === Math.round(arr[i])) {sum += arr[i];}   
  }
 return sum;
}
Run Code Online (Sandbox Code Playgroud)


CD.*_*D.. 5

递归使用怎么样reduce

function arrSum(arr) {
    return arr.reduce(function fn(a, b) {
        if (Array.isArray(b)) {
            return b.reduce(fn, a);
        } else if (b === Math.round(b)) {
            return a + b;
        } 

        return a;
    }, 0);
}
Run Code Online (Sandbox Code Playgroud)

reduce() 方法对累加器应用函数,并且数组的每个值(从左到右)都必须将其减少为单个值。