2015-02-23 97 views
0

我在http://games.usvsth3m.com/javascript-under-pressure/上發現了這個代碼,我得到了第五個問題,它需要估計列表中所有整數的總和。該列表可能包含嵌套列表。所以對於列表[1,2,3,4,5]或[[1,2,3],4,5],下面的代碼可以工作,但對於列表[[[[1]]]],2, 3,4]沒有。我嘗試了很多小時,但我不知道要解決它。我需要一個命中PLZ。計算列表清單的總和

function arraySum(i) { 

var sum =0;  
for (var id =0; id<i.length;id++){ 

    if(typeof i[id]==='object'){ 

     var ar = i[id]; 
     for (var dd =0; dd<ar.length;dd++){ 
      if(typeof ar[dd]==='number'){ 
       sum+=parseInt(ar[dd]); 
      }   
     } 
    } 
    else 
     if(typeof i[id]==='number'){ 
      sum+=parseInt(i[id]); 
     } 
    } 
return sum; 
} 
+0

使用遞歸! – Bergi 2015-02-23 22:38:32

+0

哇,我不認爲這是一個確切的重複,但我找到了一個。另請參見[查找嵌套數組的總和](http://stackoverflow.com/q/19181515/1048572) – Bergi 2015-02-23 22:49:55

+0

感謝您的回覆。我應該刪除由於重複導致的問題嗎? – b10n1k 2015-02-23 23:06:09

回答

1

使用遞歸。

var arr = [1, 2, [3, 4, [[[5]]]]]; 
num = 0; 

function loop (arr) { 
    for (var i = 0; i < arr.length; i++) { 
     if (arr[i] instanceof Array) { 
      loop(arr[i]); 
     } else { 
      num += parseInt(arr[i]); 
     } 
    } 
} 

loop(arr); 

console.log(num); 

小提琴 - http://jsfiddle.net/9j1hcx4x/

+0

你的函數應該**返回**結果,而不是增加一些全局'num'變量。 – Bergi 2015-02-23 22:45:15

+0

這工作。這是我在想什麼,但我無法讓它工作。謝謝。 – b10n1k 2015-02-23 23:08:04