2013-08-16 153 views
0

我有一个看起来像一个对象:排序在javascript火狐对象VS铬

{ 

    "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

+7

对象没有排序顺序\ –

+0

@KevinB这是非常simlar,但他希望排序'key' not'value' –

+2

是的,但答案基本上是一样的:你不能那样做。 –

回答

1

代替属性/值对排序实现此结构为对象的阵列。数组可以通过它包含的对象的任何属性进行排序。得到的排序顺序按键

0

一种方法是使用这里定义的方法生成密钥的数组:

Getting JavaScript object key list

然后,你可以使用JavaScript sort功能:

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

或者如果你觉得倾向于写自己的。

然后,只需通过键阵列循环,使用object[key]提取的值。

+2

https://developer.mozilla.org/en-US/docs/Web/JavaScript/参考/ Global_Objects /阵列/排序 –

1

因为对象是无序集合,所以您需要执行所需的排序。

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

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

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

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/