2011-05-13 84 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