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

标签 javascript

理论上,无法保证对象属性的迭代顺序。 在实践中,有一个事实上的标准。 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/

相关文章:

javascript - AngularJS中带有ngRoute的进度条

javascript - 如何在纯javascript中获取给定元素的所有父节点?

javascript - 如何连接 Jade 中的数组?

javascript - 确定所有屏幕尺寸的元素样式

javascript - 向 JSON 数据集添加值

javascript - 允许子 Iframe 从不同域调用其父窗口上的函数

javascript - 如何列出 JavaScript 中所有 undefined variable ?

javascript - 下拉菜单不与 Slick Gallery 重叠

javascript - 使用多个 &lt;script&gt; 标签不起作用 - 只调用一个脚本

Javascript 使用 $ 符号和关键字 "this"用法