1

我有一个从休息服务返回的大型 JSON,我需要先对其进行排序,然后才能使用它。

示例行:

[{"Time":"1354233600000","Name":"NAN","TagValue":"0","TagValue2":"0"},
{"Time":"1354234500000","Name":"NAN","TagValue":"0","TagValue2":"0.0020288255172466159"},
{"Time":"1354235400000","Name":"NAN","TagValue":"0","TagValue2":"0.0022446943714048121"},
{"Time":"1354236300000","Name":"NAN","TagValue":"0","TagValue2":"0.00014998416164500384"},
{"Time":"1354237200000","Name":"NAN","TagValue":"0","TagValue2":"0"},
{"Time":"1354238100000","Name":"NAN","TagValue":"0","TagValue2":"0.00015631034628383933"},
{"Time":"1354239000000","Name":"NAN","TagValue":"0","TagValue2":"1.1165024734559951E-05"}

这样的行大约有2000行。我想按时间对它们进行排序并得到这样的东西:

var restData = { "1354234500000":[
                                  {"Name":"NaN",
                                   "TagValue":"0",
                                   "TagValue2":"someFloat"}
                                   {"Name:"NAN,
                                    "TagValue":"0",
                                     "TagVale":"0"}
                                   ],
                   "aNewUnixTimeStamp":[
                                     {..........}
]};

是否有一些神奇的 javascript 函数可以用来完成此任务?

4

3 回答 3

1

假设您的对象都整齐地组织在一个数组中,您可以调用

bigArray.sort(function(a,b) {return a.Time < b.Time ? -1 : 1})
于 2012-12-01T02:49:37.963 回答
1
var myarray = [{"Time":"1354233600000","Name":"NAN","TagValue":"0","TagValue2":"0"},
{"Time":"1354234500000","Name":"NAN","TagValue":"0","TagValue2":"0.0020288255172466159"},
{"Time":"1354235400000","Name":"NAN","TagValue":"0","TagValue2":"0.0022446943714048121"},
{"Time":"1354236300000","Name":"NAN","TagValue":"0","TagValue2":"0.00014998416164500384"},
{"Time":"1354237200000","Name":"NAN","TagValue":"0","TagValue2":"0"},
{"Time":"1354238100000","Name":"NAN","TagValue":"0","TagValue2":"0.00015631034628383933"},
{"Time":"1354239000000","Name":"NAN","TagValue":"0","TagValue2":"1.1165024734559951E-05"}

var result = myarray.reduce(function(res, obj) {
    if (res.hasOwnProperty(obj.Time) === false) {
        res[obj.Time] = [];
    }
    res[obj.Time].push(obj);
    delete obj.Time;
    return res;
}, {});

您应该知道,由于结果使用时间戳作为对象的键,因此您将无法对它们进行排序,因为对象没有定义的顺序。

对于旧版浏览器,还.reduce()需要一个 shim。你可以使用MDN 提供的那个。

于 2012-12-01T03:14:58.127 回答
0

你也可以使用来自 jquery 的这个插件

http://archive.plugins.jquery.com/project/sort

$(dataSet).sort("Time", "asc");
于 2012-12-01T02:52:56.757 回答