如何在JavaScript中对多维对象进行排序?
我的代码到目前为止
Object1
Alias:"Device 1"
EventDetail:"{
"Status": "ACTIVE",
"Product": {
"SerialNumber": "ASDFD"
},
"Event": {
"Detail": "Optional."
},
"RecommendedAction": {
"Type": "MONITOR"
},
"Time": "1458708988888",
}"
EventReceivedDate:"2016-03-23T05:01:04.07"
SerialNumber:"MXQ436042C"
Object2
Alias:"Device 2"
EventDetail:"{
"Status": "ACTIVE",
"Product": {
"SerialNumber": "ASDFD"
},
"Event": {
"Detail": "Optional."
},
"RecommendedAction": {
"Type": "MONITOR"
},
"Time": "1458708999999",
}"
EventReceivedDate:"2016-03-23T05:01:04.07"
SerialNumber:"MXQ436042C"
Object3
Alias:"Device 3"
EventDetail:"{
"Status": "ACTIVE",
"Product": {
"SerialNumber": "ASDFD"
},
"Event": {
"Detail": "Optional."
},
"RecommendedAction": {
"Type": "MONITOR"
},
"Time": "1458708922222",
}"
EventReceivedDate:"2016-03-23T05:01:04.07"
SerialNumber:"MXQ436042C"
我想根据时间对对象进行排序并获得相同的结果
"Time": 1458708922222
"Time": 1458708988888
"Time": 1458708999999
结果会是那样的
Object3
Alias:"Device 3"
EventDetail:"{
"Status": "ACTIVE",
"Product": {
"SerialNumber": "ASDFD"
},
"Event": {
"Detail": "Optional."
},
"RecommendedAction": {
"Type": "MONITOR"
},
"Time": "1458708922222",
}"
EventReceivedDate:"2016-03-23T05:01:04.07"
SerialNumber:"MXQ436042C"
Object1
Alias:"Device 1"
EventDetail:"{
"Status": "ACTIVE",
"Product": {
"SerialNumber": "ASDFD"
},
"Event": {
"Detail": "Optional."
},
"RecommendedAction": {
"Type": "MONITOR"
},
"Time": "1458708988888",
}"
EventReceivedDate:"2016-03-23T05:01:04.07"
SerialNumber:"MXQ436042C"
Object2
Alias:"Device 2"
EventDetail:"{
"Status": "ACTIVE",
"Product": {
"SerialNumber": "ASDFD"
},
"Event": {
"Detail": "Optional."
},
"RecommendedAction": {
"Type": "MONITOR"
},
"Time": "1458708999999",
}"
EventReceivedDate:"2016-03-23T05:01:04.07"
SerialNumber:"MXQ436042C"
答案 0 :(得分:3)
将对象放入数组并应用排序。
var objects= [Object1, Object2, Object3];
objects.sort(function (a, b) {
return a.EventDetail.Time - b.EventDetail.Time;
});
答案 1 :(得分:0)
尝试将对象存储在数组中并使用Array.sort()方法。您的比较函数将比较每个元素的EventDetail.Time值。
答案 2 :(得分:0)
@NinaScholz答案很好,但EventDetail.Time
是字符串格式。在直接比较两者之前,尝试将其转换为整数以获得更好的结果。
因为"2"
大于"12"
,但2
小于12
。
var objects = [{
Alias: "Device 1",
EventDetail: {
"Status": "ACTIVE",
"Product": {
"SerialNumber": "ASDFD"
},
"Event": {
"Detail": "Optional."
},
"RecommendedAction": {
"Type": "MONITOR"
},
"Time": "1458708988888",
},
EventReceivedDate: "2016-03-23T05:01:04.07",
SerialNumber: "MXQ436042C"
},
{
Alias: "Device 2",
EventDetail: {
"Status": "ACTIVE",
"Product": {
"SerialNumber": "ASDFD"
},
"Event": {
"Detail": "Optional."
},
"RecommendedAction": {
"Type": "MONITOR"
},
"Time": "1458708999999",
},
EventReceivedDate: "2016-03-23T05:01:04.07",
SerialNumber: "MXQ436042C"
}];
function sortByTime(obj) {
return obj.sort(function(x, y) {
return parseInt(y.EventDetail.Time) - parseInt(x.EventDetail.Time);
});
}
var sorted = sortByTime(objects)
document.write('<pre>' + JSON.stringify(sorted, 0, 2) + '</pre>')