在数字索引循环中获取数组项的键

时间:2012-08-07 22:57:57

标签: javascript for-loop associative-array

  

可能重复:
  For..In loops in javascript - key value pairs

我需要按顺序遍历数组,就像在this question中一样。但是,我还需要访问key名称。如何在数字索引循环中执行此操作?

for(i=0; i<arr.length; i++){
    alert(arr[i].key); // clearly won't work
}

for(key in arr){
    alert(arr[key]); // works, but it doesn't loop through in the right order
}

2 个答案:

答案 0 :(得分:1)

您无法列出JavaScript对象的属性,并希望按特定顺序返回它们。

阅读此blog post并查看有关 for loop order 的部分。

答案 1 :(得分:0)

如果要对对象进行“排序”,则可以将键名放在数组中,对其进行排序,然后按照它们在数组中的顺序访问对象属性,例如:

var obj = { '3':3, '0':0, '2':2, '1':1};
var props = [];

for (var p in obj) {

  if (obj.hasOwnProperty(p)) {
    props.push(p);
  }
}

props.sort();

for (var i=0, iLen=props.length; i<iLen; i++0 {
  alert(obj[props[i]]); // 0, 1, 2, 3
}

关于对象属性的顺序,ES5说:

  

枚举属性的机制和顺序(步骤6.a)   第一个算法,第二个步骤7.a未指定。

     

http://es5.github.com/#x12.6.4

你可能会在一个流行的图书馆的评论中发现“首先列举自己的属性”的说法,这与至少一个广泛使用的浏览器的行为相矛盾,因此应该被忽视。