2017-08-17 41 views
0

在一起这是我想出了:我想这些数字加一个嵌套的数组

var nestedArr = [[[1,2],[3,4]],[[5,6]]]; 
 

 
function sumTotal() { 
 
\t for(var i = 0; i < nestedArr.length; i++) { 
 
\t \t for(var j = 0; j < nestedArr[i].length; j++) { 
 
\t \t \t for(var k = 0; k < nestedArr[i][j].length; k++) { 
 
\t \t \t \t var arrNumSum = nestedArr[i][j][k]; 
 
\t \t \t \t arrNumSum += arrNumSum; 
 

 
\t \t \t \t return arrNumSum; \t \t 
 
\t \t \t } 
 
\t \t } 
 
\t } \t 
 
} 
 

 
sumTotal();

+0

你期望在年底什么样的价值? – BenM

+0

该代码返回'nestedArr [0] [0] [0]'(乘以2) – litelite

+0

你试图得到什么结果?你从这段代码中得到了什么结果? – musefan

回答

0

你通过每一次循环中覆盖arrNumSum。而且,在第一次迭代之后,你回来得太快了。试试这个:

var nestedArr = [[[1,2],[3,4]],[[5,6]]]; 
 

 
function sumTotal() { 
 
\t var arrNumSum = 0; 
 
\t for(var i = 0; i < nestedArr.length; i++) { 
 
\t \t for(var j = 0; j < nestedArr[i].length; j++) { 
 
\t \t \t for(var k = 0; k < nestedArr[i][j].length; k++) { 
 
\t \t \t \t arrNumSum += nestedArr[i][j][k]; 
 
\t \t \t } 
 
\t \t } 
 
\t } 
 
\t return arrNumSum; \t \t 
 
} 
 

 
console.log(sumTotal());

+0

我知道你只是在修复OP的代码,但如何让他们看到更好的方式呢? – georg

+0

我看到其他人已经这样做了(并且正确地获得更多的赞誉)。对于OP来说,看看他们出错的地方可能还是有益的。 – Thomas

7

可以使用reduce()

var nestedArr = [[[1,2],[3,4]],[[5,6]]]; 
 

 
function sum(arr) { 
 
    return arr.reduce(function(r, e) { 
 
    return r + (Array.isArray(e) ? sum(e) : e) 
 
    }, 0) 
 
} 
 

 
console.log(sum(nestedArr))

0

你可以使用的Array#reduce一个recusive调用与命名功能,而不是创造递归函数作为回调。

var array = [[[1, 2], [3, 4]], [[5, 6]]], 
 
    total = array.reduce(function add(r, a) { 
 
     return Array.isArray(a) ? a.reduce(add, r) : r + a; 
 
    }, 0); 
 

 
console.log(total);