$ .each()没有正确迭代数组

时间:2011-05-13 14:03:12

标签: jquery iteration associative-array

我遇到了一个用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/

3 个答案:

答案 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}}