理论上,对象属性的迭代顺序是不确定的。
实际上,有一个事实标准。
IE<9、Firefox和Safari总是按定义的顺序进行迭代。
Opera、IE9和Chrome按字符串键的定义顺序进行迭代。
数字键被排序并在字符串键之前进行迭代。
我有一个填充了对象的数组,所有键都是数字。如何按照定义的顺序迭代这些对象属性。在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想要使用内部数组的第3个元素作为排序键对数组进行排序。所以,如果你有:
[[52668,'52668','Orange, Julian','YES'], [61230,'61230','Apple','YES'], [42689,'42689','Banana','YES']]
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]));
});