2017-08-17 43 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);