理论上,不保证对象属性的迭代顺序。 在实践中,它有一个事实上的标准。 IE< 9,Firefox,Safari总是按照定义的顺序迭代。 Opera,IE9,Chrome按照字符串键的定义顺序迭代。 数字键变为排序并在字符串键之前移动。
我有一个对象填充数组,所有键都是数字。如何以定义的顺序迭代这些对象属性。在ie9和chrome中,数字键总是在迭代之前排序。
答案 0 :(得分:3)
以任何保证方式执行此操作的唯一方法是将所有键放入数组中,对数组进行排序,然后使用数组进行迭代。
这是一些伪代码:
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]]
}
编辑:基于新评论,现在听起来像是想要使用内部数组中的第3个元素作为排序键对数组数组进行排序。所以,如果你有:
[[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]));
});