我有一个从休息服务返回的大型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");