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

Dir*_*dNJ 2 iteration jquery 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);

});
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我无法弄清楚... export_pkg的长度始终是数组中长度的文本值.Firefox和IE的开发人员工具都将export_pkg显示为包含4个项目的数组,并且它具有正确的值.但是当我到达$ .each块时......它会忽略该对象,只使用第二个条目作为对象的长度.

示例:如果阵列的长度为{length:10},则无论其他值是多少,警报框都会出现10次.我无法弄清楚为什么它没有像我期望的那样运行4次.

这是一个jslint链接http://jsfiddle.net/fFDfU/

Eri*_*lli 7

首先,你没有使用数组,它是一个对象.但您可以根据需要迭代对象属性each.

length属性用于each查看需要迭代的项目数.由于您length的对象内部存在,因此会产生混淆each.

我建议你改变那个属性名称:http://jsfiddle.net/ErickPetru/fFDfU/1/


Dar*_*rov 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() 
}, 
{
    ...
}
];
Run Code Online (Sandbox Code Playgroud)

然后你可以循环:

$.each(array, function() {
    alert(this.height + ' ' + this.length + ...);
});
Run Code Online (Sandbox Code Playgroud)

要实现您想要实现的目标(遍历对象的属性),您可以这样做:

for (var propertyName in export_pkg) {
   alert(propertyName + ' ' + export_pkg[propertyName]);   
}
Run Code Online (Sandbox Code Playgroud)