我也遇到了这个问题。解决方案是除了原始对象之外,还保留键的有序数组。
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];});


