2016-03-30 71 views
-3

如何在JavaScript中对多维对象进行排序?如何在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

无法排序的对象。 – Andy

+2

_“我的代码到目前为止......”,什么代码? –

回答

2

将对象放入一个数组并应用排序。

var objects= [Object1, Object2, Object3]; 
objects.sort(function (a, b) { 
    return a.EventDetail.Time - b.EventDetail.Time; 
}); 
+0

我希望数组按照相反顺序排列 –

+0

将返回值改回为'return b.EventDetail.Time - a.EventDetail.Time;'进行反向排序。 –

0

尝试将对象存储在数组中并使用Array.sort()方法。您的比较函数将比较每个元素的EventDetail.Time值。

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>')

+0

我希望数组按照相反顺序排列 –

+0

@LaravelTechnologies更新了答案 –

相关问题