0

我有一个 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));
        });
}

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

对象不支持属性或方法“排序”

所以我的猜测是,由于 JSON 对象的结构,我的排序方法不正确。所以问题是'我需要在我的排序方法中进行哪些更改才能使其正常工作?

我的 json 字符串的结构:

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

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

2 回答 2

0

只能Array排序,不能Object。不保证您在排序时会收到返回的已订购对象。

查看此答案以获取有效的解决方案Sorting JavaScript Object by property value

于 2013-05-06T13:57:31.660 回答
0

sort仅适用于数组,并且由于您的对象是哈希,因此您可以执行以下操作:

var items = [];
for (var k in data) {
    items.push({
        id: k,
        original: data[k]
    });
}
items.sort(...);
于 2013-05-06T13:57:36.180 回答