0

可能重复:
JavaScript 中的 For..In 循环 - 键值对

我需要按顺序遍历一个数组,就像在这个问题中一样。但是,我还需要访问该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
}
4

2 回答 2

1

您不能列出 JavaScript 对象的属性并期望它们以特定顺序返回。

阅读这篇文并查看关于for loop order的部分。

于 2012-08-07T23:01:14.650 回答
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

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

于 2012-08-07T23:28:06.047 回答