如何按定义的顺序迭代数字命名的对象属性?

时间:2011-10-13 23:00:20

标签: javascript

理论上,不保证对象属性的迭代顺序。 在实践中,它有一个事实上的标准。 IE< 9,Firefox,Safari总是按照定义的顺序迭代。 Opera,IE9,Chrome按照字符串键的定义顺序迭代。 数字键变为排序并在字符串键之前移动。

我有一个对象填充数组,所有键都是数字。如何以定义的顺序迭代这些对象属性。在ie9和chrome中,数字键总是在迭代之前排序。

1 个答案:

答案 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]));
});