2011-05-13 50 views
2

我有一個問題迭代關聯數組與jQuery。我在html頁面四跨一聯......我使用JSON,形成文字的數組(),由這些值來構建維數組

var export_pkg = { 
      height : $('#cubeiq_hght').text(), 
      length : $('#cubeiq_lnth').text(), 
      depth : $('#cubeiq_wdth').text(), 
      weight : $('#cubeiq_wght').text() 
}; 

$.each(export_pkg, function(key,value){ 

    alert(key + ' ' + value); 

}); 

對於原因,我想不通... export_pkg的長度始終是數組中長度的文本值。 Firefox和IE的開發人員工具都顯示export_pkg是一個包含4個項目的數組,並且它具有正確的值。但是,當我到達$ .each塊...它忽略該對象,並只使用第二個條目作爲對象的長度。

示例:如果數組有一個{length:10},則無論其他值是多少,警告框都會出現10次。我無法弄清楚爲什麼它不能像我預期的那樣運行4次。

這裏是一個JSLint的鏈接http://jsfiddle.net/fFDfU/

回答

1

你的對象有哪些$.each使用遍歷數組,在物業length。既然你正在定義它,你就搞砸了方法的行爲。嘗試將名稱更改爲_length

var export_pkg = { height : '10', _length : '3', depth : '30', weight : '40' }; 
+0

AHHHHH現在總有意義!我正在覆蓋其中一個內置屬性!非常感謝你! – DirtyBirdNJ 2011-05-13 14:11:55

+3

@DirtyBirdNJ:不錯,但正是我在3分鐘之前所說的,並帶着一把小提琴給你...... – 2011-05-13 14:17:03

5

你有什麼不是對象的數組,但屬性的對象。數組的定義是這樣的:

var array = [ 
{ 
    height : $('#cubeiq_hght').text(), 
    length : $('#cubeiq_lnth').text(), 
    depth : $('#cubeiq_wdth').text(), 
    weight : $('#cubeiq_wght').text() 
}, 
{ 
    height : $('#cubeiq_hght').text(), 
    length : $('#cubeiq_lnth').text(), 
    depth : $('#cubeiq_wdth').text(), 
    weight : $('#cubeiq_wght').text() 
}, 
{ 
    ... 
} 
]; 

那麼你可以循環:

$.each(array, function() { 
    alert(this.height + ' ' + this.length + ...); 
}); 

並實現你想實現(通過一個對象的屬性環路)你可以這樣做:

for (var propertyName in export_pkg) { 
    alert(propertyName + ' ' + export_pkg[propertyName]); 
} 
+1

'each'可用於循環對象屬性,如OP所需。 – 2011-05-13 14:10:00

7

首先,你是不是使用陣列,這是一個對象。但是,您可以根據需要使用each迭代對象屬性。

length屬性被each用來查看需要迭代多少項。由於對象內部有一個length,因此它會混淆each

我建議你更改屬性名稱:http://jsfiddle.net/ErickPetru/fFDfU/1/

+0

是的,釘在頭上先生...我覆蓋了一個內置的財產。現在完美的工作! – DirtyBirdNJ 2011-05-13 14:38:18

+0

好的。感謝由upvote。 – 2011-05-13 15:00:04