尝试在Javascript中从我的json中对项目进行排序

时间:2013-05-06 13:54:51

标签: javascript json sorting

我有一个JSON字符串,我用json2.js库解析为JSON对象。

var parsed = JSON.parse(jsonstring);

之后我做了一些魔术向用户显示数据。包含的数据是几条消息。在所有浏览器中,它们按正确的顺序排序。但是在IE9中,顺序是相反的。从旧消息到新消息,而不是新消息。

我读到解析结果的顺序没有修复,取决于JavaScript版本。所以我试着按照我想要的方式对项目进行排序,但它没有用。

我目前正在做:

var parsed = JSON.parse(feeds);
parsed = sortJSON(parsed, "created");

function sortJSON(data, key) {
     return data.sort(function(a, b) {
            var x = a[key]; var y = b[key];
            return ((x < y) ? -1 : ((x > y) ? 1 : 0));
        });
}

但是我在控制台中收到以下错误:

  

对象不支持属性或方法'sort'

所以我的猜测是因为JSON对象的结构,我的排序方法不正确。所以问题是'我需要在排序方法中改变什么才能使其有效?

我的json字符串的结构:

 {"<ID>":{"text":"...","user":"...","created":"<date>",
 "subject":"","url":"...","img_class":".."},

 "<ID>":{"text":"...","user":"...","created":"<date>","subject":"",
 "url":"...","img_class":"..."}, <MORE MESSAGES> 
 }

2 个答案:

答案 0 :(得分:0)

只能对Array进行排序,而不是Object。您无法保证在对其进行排序时收到有序对象。

查看有关正常工作解决方案的答案Sorting JavaScript Object by property value

答案 1 :(得分:0)

sort仅适用于数组,因为你的对象是哈希,你可以这样做:

var items = [];
for (var k in data) {
    items.push({
        id: k,
        original: data[k]
    });
}
items.sort(...);