我需要按顺序遍历一个数组,就像在这个问题中一样。但是,我还需要访问该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
}
我需要按顺序遍历一个数组,就像在这个问题中一样。但是,我还需要访问该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
}
您不能列出 JavaScript 对象的属性并期望它们以特定顺序返回。
阅读这篇博文并查看关于for loop order的部分。
如果你想“排序”一个对象,那么你可以将键名放在一个数组中,对其进行排序,然后按照它们在数组中的顺序访问对象属性,例如:
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)。
您可能会在一个流行库的评论中发现“首先枚举自己的属性”的说法,这与至少一个广泛使用的浏览器的行为相矛盾,因此应该忽略。