2015-11-03 45 views
0

這是一個簡單的JavaScript代碼,它將一個數組中的唯一數據添加到另一個數組中。循環動態更新陣列不工作

var data = [1, 2, 3, 2] 
var dump = []; 
for (var i = 0; i < data.length; i++) { 
    if (dump.length == 0) { 
     dump.push(data[i]) 
    } else { 
     for (var a = 0; a < dump.length; a++) { 
      if (dump[a] != data[i]) { 
       if (a >= dump.length) { 
        dump.push(data[i]) 
       } 
      } 
     } 
    } 
} 

我只能從數據陣列1項:[1]而不是[1,2,3]

+1

使用鉛筆和紙通過算法給您的工作方式,你會看到'(一個> =轉儲.length)'不會是真的。 – nnnnnn

+0

答案不是唯一的關鍵,但方法很重要。所以我建議你把console.log語句,只是調試它,因爲它看起來像你缺少的東西(在編程邏輯方面)。 – guptakvgaurav

+0

http://stackoverflow.com/a/14438954/2609085 – guptakvgaurav

回答

1

這是監守此行

if (a >= dump.length) { 
    dump.push(data[i]) 
} 

你推送的數據時,是大於或等於dump.length

,但在循環

a < dump.length 

它不會讓它有

嘗試這樣

for (var a = 0; a < dump.length; a++) { 
    if (dump[a] == data[i]) { // when found break there 
     break; 
    } 
} 
if (a == dump.length) // if nothing found loop will be fully executed 
    dump.push(data[i]); 

JSFIDDLE

+0

只有當所有轉儲項目被選中時,我纔想將數據項目推送到轉儲數組中,因此使用> = dump.length。我想a會在循環結尾增加1大於dump.length(a ++) –

+0

檢查我的小提琴@RameshKhadka –

+0

感謝兄弟它的工作非常感謝 –