循环遍历关联数组

时间:2011-02-10 11:04:08

标签: javascript

我正在使用javascript关联数组(arr)并使用此方法循环遍历它。

for(var i in arr) {
    var value = arr[i];
    alert(i =") "+ value);
}

问题在于项目的顺序对我来说很重要,它需要从最后一个循环到第一个,而不是像现在一样循环到最后一个。

有办法做到这一点吗?

4 个答案:

答案 0 :(得分:43)

四件事:

  1. JavaScript有数组(整数索引[见下面的注释])和对象(字符串索引)。你在另一种语言中称之为关联数组的东西在JS中称为对象。

  2. shouldn't use for in to loop through a JS array

  3. 如果您循环浏览对象,请使用:hasOwnProperty

  4. JavaScript不保证对象中键的顺序。如果您关心订单,请改用数组。

  5. 如果您使用的是普通数组,请执行以下操作:

    for (var i = arr.length - 1; i >= 0; i--) {
        //do something with arr[i]
    }
    

答案 1 :(得分:14)

使用按相反顺序按住键的临时数组:

var keys = new Array();

for (var k in arr) {
    keys.unshift(k);
}

for (var c = keys.length, n = 0; n < c; n++) {
   alert(arr[keys[n]]);
}

答案 2 :(得分:3)

对于普通数组,我会这样做:

var i = arr.length;
while (i--) {
    var value = arr[i];
    alert(i =") "+ value);
}

这比“for”循环更快。

http://blogs.oracle.com/greimer/entry/best_way_to_code_a

答案 3 :(得分:2)

在现代浏览器中,您现在可以使用Object.keys来获取属性数组,并以相反的顺序逐步执行它,从而允许您跳过初步密钥收集循环。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

var keys = Object.keys(subject);
for (var i = keys.length-1; i >= 0; i--) {
    var k = keys[i],
        v = subject[k];
    console.log(k+":",v);
}