2013-03-24 75 views
0

我有對象(data)的列表,我這樣做:Javascript - 爲什麼不是我的數組循環工作?

for (var i = 0; data.length < i; i++) {...}

但它不工作。當我使用這個:

for (var i in data) {

它的工作原理,但循環三次,當只有一個對象,在這種情況下i是:0(正確的),indexOfObject(WTF),removeItem(WTF) 。

爲什麼我的第一個表達式不起作用?這兩個值是i值是什麼?難道我做錯了什麼?

編輯:既然這件事情有點複雜,我所能做的最好的就是提供我的數據對象的截圖:screenshot

+4

您必須發佈實際的數組值才能讓人們提供完整,準確的答案。 – Pointy 2013-03-24 19:18:18

+0

'for ... in'遍歷對象的所有枚舉屬性。 'data'似乎是一個*數組類似的*對象,而不是一個正常的數組,並且似乎具有'indexOfObject'和'removeItem'屬性。 – 2013-03-24 19:19:13

+0

你能擺弄小提琴嗎? – DevelopmentIsMyPassion 2013-03-24 19:19:47

回答

4

檢查for循環語句中,循環條件(data.length < i)是另一種方式,可能永遠不會實現。

它應該是:

for (var i = 0; i < data.length; i++) 
    { 
     // Now write your code 
    } 
+0

賓果。我沒有看到那個錯誤。謝謝。 :) – ojek 2013-03-24 19:22:35

+0

對不起,只是劫持你的帖子,但我覺得明確指出這個錯誤更有幫助。 – 2013-03-24 19:24:27

+0

ohh @FelixKling沒問題。我只是這樣做。順便說一句,謝謝編輯:) – Sachin 2013-03-24 19:25:23

1

如果你真的有一個陣列

var a = ["hello", "world"]; 

var a = new Array(); 
a[0] = "hello"; 
a[1] = "world"; 

然後你的第一個循環(使用索引變量)是正確的。您應該使用in樣式for循環來遍歷對象的屬性,但是數組索引的屬性的索引樣式。

編輯 — oops good call @Sachin - 您的for環路測試向後。

如果你有一個普通的對象,你想通過它的屬性進行迭代,但跳過的對象的原型鏈中的屬性,你可以做這樣的事情:

for (var name in obj) { 
    if (obj.hasOwnProperty(name)) { 
    var value = obj[name]; 
    // do stuff 
    } 
} 
0

我可以從上面給出的代碼中看到,你給錯了條件裏面的for循環。首先,您將變量i初始化爲0,然後檢查data.length < 0.任何長度值是否可以小於零?

你可以使用它,如: -

for (var i = 0; i<data.length; i++) {...} 

嘗試它將工作。

+0

*「任何長度值可以小於零?」*由於這不是一個正常的數組,它實際上可以。這沒有道理,但在技術上是可行的。 – 2013-03-24 19:25:36