我想在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));
答案 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);