理论上,无法保证对象属性的迭代顺序。 在实践中,有一个事实上的标准。 IE<9, Firefox, Safari 总是按照定义顺序迭代。 Opera、IE9、Chrome 按照字符串键的定义顺序进行迭代。 数字键被排序并排在字符串键之前。
我有一个对象填充数组,所有键都是数字。如何按定义的顺序遍历这些对象属性。在 ie9 和 chrome 中,数字键总是在迭代前排序。
最佳答案
以任何有保证的方式做到这一点的唯一方法是将所有键放入一个数组,对数组进行排序,然后使用该数组进行迭代。
这是一些伪代码:
var obj = {}; // object with lots of properties
var keys = [];
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
keys.push(i);
}
}
// may have to craft a custom sort function to get the right order
keys.sort();
for (i = 0; i < keys.length; i++) {
// operate on obj[keys[i]]
}
编辑:根据一条新评论,现在听起来 OP 希望使用内部数组中的第三个元素作为排序键对数组数组进行排序。所以,如果你有:
[[52668,'52668','Orange, Julian','YES'], [61230,'61230','Apple','YES'], [42689,'42689','Banana','YES']]
他想按水果名称排序(内部数组中的第 3 项)
可以这样做:
var data = [[52668,'52668','Orange, Julian','YES'], [61230,'61230','Apple','YES'], [42689,'42689','Banana','YES']];
data.sort(function(a, b) {
return(a[2].localeCompare(b[2]));
});
关于javascript - 如何按定义的顺序迭代以数字命名的对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7761402/