0

我有一个看起来像的对象:

{

    "2013": {
        "name": 2013,
        "ts_create": 1375254000000,
        "view_url": "some_url",
        "save_url": "some_url_2",
        "id": "",
        "exists": true,
        "children": []
        },
"2012": {
        "name": 2013,
        "ts_create": 1375254000000,
        "view_url": "some_url",
        "save_url": "some_url_2",
        "id": "",
        "exists": true,
        "children": []
        },
"2011": {
        "name": 2013,
        "ts_create": 1375254000000,
        "view_url": "some_url",
        "save_url": "some_url_2",
        "id": "",
        "exists": true,
        "children": []
        }
}

我面临的问题是,似乎只有在谷歌浏览器中,当我循环这个对象时,对象会向后循环。

循环显示对象的预期结果应该列出 2013、2012、2011 年的事情。这发生在 Firefox 中。但是方法没有变化,Chrome 中的对象完全相同。我会得到 2011、2012、2013

所以有了这个,我显然需要在循环之前对这个对象应用某种级别的排序,因为 Chrome 想要让循环向后读取它。我面临的问题不完全确定如何使用 JS 对对象进行排序

4

4 回答 4

1

当您迭代对象属性时,无法保证顺序。您可以将对象添加到数组中,然后对数组进行排序:

var obj = {"2012" : {}, "2011" : {}, "2013" : {}};
var arr = [];
for (var year in obj) {
    arr.push({year : year, data : obj[year]});
}
arr.sort(function(a,b) {
    return b.year - a.year;
});

http://jsfiddle.net/wK5KE/

于 2013-08-16T21:24:59.727 回答
1

代替属性/值对将此结构实现为对象数组。您可以按其包含的对象的任何属性对数组进行排序。

于 2013-08-16T21:19:53.597 回答
1

因为对象是无序的集合,所以由你来强制执行你想要的排序。

一种方法是获取对象属性的数组,对它们进行排序,然后迭代数组。

Object.keys(data)
      .sort(function(a, b) {
          return +b - +a;
       })
      .forEach(function(key) {
          var item = data[key];
      });

这假设您想要一个简单的降序。

于 2013-08-16T21:20:26.217 回答
0

按排序顺序获取键的一种方法是使用此处定义的方法生成键数组:

获取 JavaScript 对象键列表

然后你可以使用javascriptsort函数:

http://www.w3schools.com/jsref/jsref_sort.asp

或者,如果您愿意,也可以自己编写。

然后只需遍历键数组,object[key]用于提取值。

于 2013-08-16T21:20:05.260 回答