我也遇到过这个问题。一个解决方案是在原始对象之外保留一个有序的键数组。
var objects = {
"7": {"id":"7","name":"Hello"},
"3": {"id":"3","name":"World"},
...
}
var order = [ "3", "7", ... ];
现在,如果您想要第二个元素,您可以进行以下查找:
var second_object = objects[order[1]];
ECMA 标准没有说明对象中元素的顺序。特别是当它们看起来像数字时,Chrome 会重新排序键。例子:
var example = {
"a": "a",
"b": "b",
"1": "1",
"2": "2"
};
如果你在 Chrome 中打印它会得到类似的东西:
{
1: "1",
2: "2",
"a": "a",
"b": "b"
};
这有点酸..但生活。
您也可以使用 Andy 链接的解决方案,基本上将这两者包装在一个对象中。
我经常使用的另一种方法是自定义映射函数,它允许您指定遍历对象的顺序。通常,您将在向用户打印数据时进行排序,因此在循环和创建表行(例如)时,迭代器将按照排序函数指定的顺序传递行。我认为这是个好主意:)
签名看起来像:
function map(object, callback, sort_function);
用法示例:
map(object, function (row) {
table.add_row(row.header, row.value);
}, function (key1, key2) {
return object[key1] - object[key2];
});