按优先级排序JSON对象

时间:2018-03-29 09:09:26

标签: javascript jquery json

首先,我有一个JSON对象,例如:

{
    "allSitesInfo": [{
            "title": "Site001",
            "website": "http://www.example.com/",
            "lat": "22.70896",
            "lng": "120.35197",
            "content": {
                "PR": "87.89",
                "kWh": "1700"
            },
            "type": "grn-blank"
        }
    ]
}

这是我的所有网站列表。包含四种类型的电站的能源状况。 但是,我需要根据优先级重新排序列表。

enter image description here

优先级从高到低:

enter image description here 设备已断开"type": "X"

enter image description here 系统错误"type": "pause"

enter image description here 部分系统错误"type": "wht-stars"

enter image description here 系统正常"type": "grn-blank"

以下是我的代码段:

function GetRealTimeList() {

    var url = "ajaxHandler.jhp";

    var args = {};
    args["task"] = "GetRealTimeList";

    $.ajax({
            "url": url,
            method: "GET",
            data: args,
        })
        .done(function (data) {

            var allSites = JSON.parse(data);

            for (var i = 0; i < allSites["allSitesInfo"].length; i++) {
              $("#custom-search-site").append("<li><img src=\"img/paddle/"+ allSites["allSitesInfo"][i]["type"] +"_maps.png\" class=\"blank\"><span>"+ allSites["allSitesInfo"][i]["title"] +"</span></li>");
            }

        })
        .fail(function (data) {
            console.log("Get real time data fail. " + data);
        });
  }

如何在 javascript SE5

中执行此操作

5 个答案:

答案 0 :(得分:5)

您可以将对象作为所需订单的哈希表,并使用该对象进行排序。

default包含一个巨大的值A WebRTC browser for iOS developed in the open. Bowser is built on top of OpenWebRTC.,可以将未知类型排序到最后。

var order = { "X": 1, "pause": 2, "wht-stars": 3, "grn-blank": 4, default: Infinity };

array.sort(function (a, b) {
    return (order[a.type] || order.default) - (order[b.type] || order.default);
});

答案 1 :(得分:0)

添加typeId取决于您希望如何对类型进行排序,例如

{
    "allSitesInfo": [
{
            "title": "Site001",
            "website": "http://www.example.com/",
            "lat": "22.70896",
            "lng": "120.35197",
            "content": {
                "PR": "87.89",
                "kWh": "1700"
            },
            "type": "x",
            "typeid":1
        },
{
            "title": "Site001",
            "website": "http://www.example.com/",
            "lat": "22.70896",
            "lng": "120.35197",
            "content": {
                "PR": "87.89",
                "kWh": "1700"
            },
            "type": "pause",
            "typeid"2
        },
{
            "title": "Site001",
            "website": "http://www.example.com/",
            "lat": "22.70896",
            "lng": "120.35197",
            "content": {
                "PR": "87.89",
                "kWh": "1700"
            },
            "type": "wht-stars",
            "typeid":3
        },
{
            "title": "Site001",
            "website": "http://www.example.com/",
            "lat": "22.70896",
            "lng": "120.35197",
            "content": {
                "PR": "87.89",
                "kWh": "1700"
            },
            "type": "grn-blank",
            "typeid":4
        }
    ]
}

并在升级到DOM之前对它们进行排序

答案 2 :(得分:0)

您可以使用array.sort进行排序。这是最终的代码:

function GetRealTimeList() {
    var url = "ajaxHandler.jhp";
    var args = {};

    args["task"] = "GetRealTimeList";

    $.ajax({
            url: url,
            method: "GET",
            data: args,
        })
        .done(function (data) {

            var allSites = JSON.parse(data);
            var sorted = allSites.allSitesInfo.sort(compare)

            sorted.forEach((item, index) => {
                $("#custom-search-site").append(
                    "<li><img src=\"img/paddle/" + allSites["allSitesInfo"][i]["type"] + "_maps.png\" class=\"blank\"><span>" + allSites["allSitesInfo"][i]["title"] + "</span></li>"
                );
            })

        })
        .fail(function (data) {
            console.log("Get real time data fail. " + data);
        });
}

function compare(a, b) {
    var order = {
        "X": 0,
        "pause": 1,
        "wht-stars": 2,
        "grn-blank": 3
    };

    // a should come first
    if (order[a.type] < order[b.type]) {
        return -1;
    }

    // b should come first
    else if (order[a.type] > order[b.type]) {
        return 1;
    };

    return 0;
}

答案 3 :(得分:0)

请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

var allSites = JSON.parse(data);
let m = {"X":1, "pause":2, "wht-stars":3, "grn-blank":4}
var sortedData = allSites.sort((a,b)=> {return a[m[type]]> b[m[type]];  });
// print result

答案 4 :(得分:0)

  

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

你可以使用排序功能我创建一个键对象来分配一个值和类型的名称,然后使用sort函数重新排序元素

&#13;
&#13;
const sites  =  [
  {
    "type": "X"
  },
  {
     "type": "wht-stars"
  },
  {
     "type": "pause"
  },
  {
    "type": "grn-blank"
  }
];
  
const key = {
  "grn-blank": 1,
  "pause": 0,
  "wht-stars": -1,
  "X": -2
}

const arr = sites.sort((a, b) => key[a.type] < key[b.type] ? 1 : -1);

console.log(arr)
&#13;
&#13;
&#13;