我遇到了一个用jQuery迭代关联数组的问题。我在html页面中有四个跨度......我使用json从那些形成一个text()值的数组来构建一个维度数组
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/
答案 0 :(得分:7)
首先,您没有使用数组,它是对象。但您可以根据需要使用each
迭代对象属性。
length
使用each
属性来查看需要迭代的项目数。由于您的对象中有length
,因此会混淆each
。
我建议您更改该属性名称:http://jsfiddle.net/ErickPetru/fFDfU/1/
答案 1 :(得分: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]);
}
答案 2 :(得分:1)
您的对象具有length
$.each
用于迭代数组的属性_length
。由于您正在定义它,因此您正在搞砸该方法的行为。尝试将名称更改为其他内容,例如var export_pkg = { height : '10', _length : '3', depth : '30', weight : '40' };
{{1}}