递归地汇总JavaScript多维数组

时间:2017-03-12 21:24:56

标签: javascript recursion

我想在JavaScript中对多维数组的总和求和,但它没有提供正确的值,因为嵌套数组与总和连接在一起。以下是我的代码:

    var arr = [1, 2, 3, [4, 3], [10, 50], 98, 100];

    function recursion(array, length = 0) {
        if (array.length === length) return 0;

        if (Array.isArray(array[length])) {
            recursion(array[length]);
        }
        console.log(array[length]);

        return array[length] + recursion(array, length + 1);
    }

    console.log(recursion(arr));

错误可以在下面的屏幕截图中看到,这是google chrome的控制台。 enter image description here

5 个答案:

答案 0 :(得分:2)

您错过了return

...
if (Array.isArray(array[length])) {
    return recursion(array[length]);
}
...

P.S。我建议将参数名称从length更改为其他内容(可能是position),以避免与数组的length属性混淆。

答案 1 :(得分:1)



function sum(e) {                      // take an element and return it if it's not an array or return the recursive sum if it's an array
  if(e instanceof Array) {             // if it's an array
    return e.reduce(function(s, e) {   // call sum on each item of the array and return the accumulated sum
      return s + sum(e);
    }, 0);
  }
  else                                 // else (if it's not an array) then return the item
    return e;
}

var arr = [1, 2, 3, [4, 3], [10, 50], 98, 100];

console.log(sum(arr));




答案 2 :(得分:1)

另一种方法是使用reduce()



var arr = [1, 2, 3, [4, 3],[10, 50], 98, 100];

function recursion(array) {
  return array.reduce(function(r, e) {
    return r += Array.isArray(e) ? recursion(e) : e
  }, 0)
}

console.log(recursion(arr));
console.log(recursion([1, [[[1, [[[2]]]]]]]));




答案 3 :(得分:1)

你甚至不需要这个功能。该功能内置于Array原型中。

const arr = [1, 2, 3, [4, 3], [10, 50], 98, 100]
const sum = [].concat(...arr).reduce((acc, curr) => acc + curr)

console.log(sum)

答案 4 :(得分:0)

没有必要进行递归。您可以使用.toString().split().reduce()

var arr = [1, 2, 3, [4, 3], [10, 50], 98, 100];
var n = arr.toString().split(/,/).reduce(function(a, b) {return +a + +b});

console.log(n);