如何在javascript中对多维对象进行排序

时间:2016-03-30 11:51:56

标签: javascript jquery

如何在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"

3 个答案:

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