使用新密钥对 JSON 重新排序



我有一个从休息服务返回的大型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函数可以用来完成此操作?

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()还需要为旧版浏览器提供垫片。您可以使用 MDN 提供的那个。

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

bigArray.sort(function(a,b) {return a.Time < b.Time ? -1 : 1})

你也可以从jquery使用这个pligin

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

$(dataSet).sort("Time", "asc");

最新更新