2016-02-26 41 views
0

我在遍歷數組(結果)並填充對象(testArray)。這裏是我的代碼如下:插入我的對象中的神祕「刪除」鍵在填充它時

$.each(results, function(key, value) 
{ 
     console.log('value is'); 
     console.log(value.Id); 
     testArray[value.Id] = value; 
}); 
for(var key in testArray) { 
      console.log(key); 
      console.log(testArray[key].Name); 
     } 

問題:當過testArray迭代打印的「刪除」和與之相關的名稱是「不確定」的最後一個鍵。這樣的值,如「刪除」不存在不會從$ .each打印。

+2

你可能有另一個庫添加刪除方法Array.prototype – juvian

回答

2

OK,如果它是一個對象,而不是一個數組(代碼命名爲testArray這實在是令人困惑的),那麼你就可以做到這一點,以消除已添加到原型枚舉的屬性:

for (var key in testArray) { 
    if (testArray.hasOwnProperty(key)) { 
     console.log(testArray[key]); 
    } 
} 

以前的答案當我們都通過testArray是一個數組。

這就是爲什麼你不應該遍歷數組有:

for (var key in testArray) 

因爲數組對象是迭代所有枚舉的屬性,不僅數組元素。您可能正在運行一些代碼,該代碼會添加一個新的方法來執行迭代過程中正在拾取的數組對象。

請使用傳統的for循環或使用.forEach()

for (var i = 0; i < testArray.length; i++) { 
    console.log(testArray[i]); 
} 

testArray.forEach(function(item) { 
    console.log(item); 
}); 

這些方法將枚舉僅實際的數組元素,即可能已添加到Array對象不其它性質。

P.S.可以向Array添加方法,如果它們被設置爲不可枚舉的,將不會遇到此問題,但是您仍然不應該使用for/in迭代陣列。此外,ES6有一個新的for/of語法,可以安全地用於迭代數組,但它需要ES6環境。

+0

我懷疑像你提到的事情發生。然而,由於testArray是一個對象,我不能使用它。我試過了。您的其他建議.forEach也不起作用。我不知道該怎麼辦。 – Nikolay

+0

@Arthlete - 你沒有說這是一個普通的對象,你的代碼將其稱爲'testArray',所以我們都假設它是一個數組。如果它不是數組,那這是個不好的變量名。看看我添加到我的答案的開始。 – jfriend00

+0

你是對的。編寫代碼時我很匆忙。這是我的不好。謝謝您的幫助! – Nikolay