如何排序JSON数组

时间:2014-09-11 17:53:45

标签: jquery arrays json

我想显示来自JSON文件的统计信息,按" verbruik"排序。现在我知道如果数组有一个像1 = "12313", 3 = "2124"那样的信息,如何对数组进行排序。

我已将整个JSON文件放在变量中:

for( var index in data)
                    {
                        var item = data[index];

也有人可以非常简单地解释一下:

for (var index in data)

我知道你可以使用3个参数:value,key和index。但是我的代码如何知道哪一个是值,键或索引?就像我只在其中放入索引一样,它将其识别为索引而不是键。

注:

我正在努力理解和学习JQUERY和JSON,请怜悯我。

JSON文件:

{
    "46": {
        "voornaam": "Sergio",
        "achternaam": "Bloemenouw",
        "verbruik": "100000",
        "afdeling": "FHACI",
        "geslacht": "man",
        "verbruikPercentage": "18.2%"
    },
    "25": {
        "voornaam": "Chayenne",
        "achternaam": "Aalberink",
        "verbruik": "200000",
        "afdeling": "FHEHT",
        "geslacht": "vrouw",
        "verbruikPercentage": "36.4%"
    },
    "63": {
        "voornaam": "Theo",
        "achternaam": "Beijer",
        "verbruik": "50000",
        "afdeling": "FHCOM",
        "geslacht": "man",
        "verbruikPercentage": "9.1%"
    },
    "55": {
        "voornaam": "Xantha",
        "achternaam": "Dijenborgh",
        "verbruik": "80000",
        "afdeling": "FHJ",
        "geslacht": "vrouw",
        "verbruikPercentage": "14.5%"
    },
    "21": {
        "voornaam": "Steinar",
        "achternaam": "Beernink",
        "verbruik": "297000",
        "afdeling": "FHFM",
        "geslacht": "man",
        "verbruikPercentage": "54%"
    },
    "13": {
        "voornaam": "Oger",
        "achternaam": "Annevelink",
        "verbruik": "375000",
        "afdeling": "FHMER",
        "geslacht": "man",
        "verbruikPercentage": "68.2%"
    },
    "9": {
        "voornaam": "Liduin",
        "achternaam": "Bouwens",
        "verbruik": "400000",
        "afdeling": "FHMEM",
        "geslacht": "vrouw",
        "verbruikPercentage": "72.7%"
    },
    "39": {
        "voornaam": "Janique",
        "achternaam": "Brukink",
        "verbruik": "125000",
        "afdeling": "FHIBS",
        "geslacht": "vrouw",
        "verbruikPercentage": "22.7%"
    },
    "30": {
        "voornaam": "Germain",
        "achternaam": "Huisken",
        "verbruik": "180000",
        "afdeling": "JHAF",
        "geslacht": "man",
        "verbruikPercentage": "32.7%"
    },
    "5": {
        "voornaam": "Nigel",
        "achternaam": "Hoek",
        "verbruik": "400000",
        "afdeling": "Dienst IT",
        "geslacht": "man",
        "verbruikPercentage": "72.7%"
    },
    "3": {
        "voornaam": "Shelly",
        "achternaam": "Ameschot",
        "verbruik": "550000",
        "afdeling": "FHICT",
        "geslacht": "vrouw",
        "verbruikPercentage": "100%"
    },
    "61": {
        "voornaam": "Lucas",
        "achternaam": "Bernts",
        "verbruik": "60000",
        "afdeling": "FHDNP",
        "geslacht": "man",
        "verbruikPercentage": "10.9%"
    },
    "33": {
        "voornaam": "Dana",
        "achternaam": "Blokhuizen",
        "verbruik": "150000",
        "afdeling": "FYDES",
        "geslacht": "vrouw",
        "verbruikPercentage": "27.3%"
    },
    "23": {
        "voornaam": "Hidde",
        "achternaam": "Brandenborg",
        "verbruik": "250000",
        "afdeling": "FHKEE",
        "geslacht": "man",
        "verbruikPercentage": "45.5%"
    },
    "28": {
        "voornaam": "Noor",
        "achternaam": "Baek",
        "verbruik": "200000",
        "afdeling": "FOSO",
        "geslacht": "vrouw",
        "verbruikPercentage": "36.4%"
    },
    "26": {
        "voornaam": "Max",
        "achternaam": "den Diepenbroek",
        "verbruik": "200000",
        "afdeling": "FLOS",
        "geslacht": "man",
        "verbruikPercentage": "36.4%"
    },
    "27": {
        "voornaam": "Eulalie",
        "achternaam": "Kaszenborgh",
        "verbruik": "200000",
        "afdeling": "FLOT",
        "geslacht": "vrouw",
        "verbruikPercentage": "36.4%"
    },
    "32": {
        "voornaam": "Clarence",
        "achternaam": "Dolderman",
        "verbruik": "175000",
        "afdeling": "FDOO",
        "geslacht": "man",
        "verbruikPercentage": "31.8%"
    },
    "41": {
        "voornaam": "Regie",
        "achternaam": "Baankreise",
        "verbruik": "125000",
        "afdeling": "FHK",
        "geslacht": "vrouw",
        "verbruikPercentage": "22.7%"
    },
    "19": {
        "voornaam": "Ingeborg",
        "achternaam": "Aart",
        "verbruik": "350000",
        "afdeling": "MARCOM",
        "geslacht": "vrouw",
        "verbruikPercentage": "63.6%"
    },
    "47": {
        "voornaam": "Diederik",
        "achternaam": "Baajens",
        "verbruik": "100000",
        "afdeling": "FSH",
        "geslacht": "man",
        "verbruikPercentage": "18.2%"
    },
    "16": {
        "voornaam": "Fien",
        "achternaam": "Apenhorst",
        "verbruik": "350000",
        "afdeling": "FHTL",
        "geslacht": "vrouw",
        "verbruikPercentage": "63.6%"
    },
    "62": {
        "voornaam": "Dick",
        "achternaam": "Boeseken",
        "verbruik": "60000",
        "afdeling": "FHV",
        "geslacht": "man",
        "verbruikPercentage": "10.9%"
    },
    "48": {
        "voornaam": "Danielle",
        "achternaam": "Bello",
        "verbruik": "100000",
        "afdeling": "FHPM",
        "geslacht": "vrouw",
        "verbruikPercentage": "18.2%"
    },
    "70": {
        "voornaam": "Bertus",
        "achternaam": "Aelberdink",
        "verbruik": "30000",
        "afdeling": "FHHRM",
        "geslacht": "man",
        "verbruikPercentage": "5.5%"
    },
    "34": {
        "voornaam": "Manfred",
        "achternaam": "Cassenbarg",
        "verbruik": "150000",
        "afdeling": "FHPEG",
        "geslacht": "man",
        "verbruikPercentage": "27.3%"
    },
    "29": {
        "voornaam": "Jinny",
        "achternaam": "Bleeken",
        "verbruik": "200000",
        "afdeling": "FHSOC",
        "geslacht": "vrouw",
        "verbruikPercentage": "36.4%"
    },
    "49": {
        "voornaam": "Teresa",
        "achternaam": "Bresthuis",
        "verbruik": "100000",
        "afdeling": "FPZ",
        "geslacht": "vrouw",
        "verbruikPercentage": "18.2%"
    },
    "12": {
        "voornaam": "Mariska",
        "achternaam": "Borchert",
        "verbruik": "395000",
        "afdeling": "FHTNW",
        "geslacht": "vrouw",
        "verbruikPercentage": "71.8%"
    },
    "15": {
        "voornaam": "Leo",
        "achternaam": "Baggerman",
        "verbruik": "375000",
        "afdeling": "FHENG",
        "geslacht": "man",
        "verbruikPercentage": "68.2%"
    },
    "56": {
        "voornaam": "Marijn",
        "achternaam": "Dierkinck",
        "verbruik": "75000",
        "afdeling": "FHTEL",
        "geslacht": "man",
        "verbruikPercentage": "13.6%"
    },
    "6": {
        "voornaam": "Berry",
        "achternaam": "Backer",
        "verbruik": "400000",
        "afdeling": "FHBET",
        "geslacht": "man",
        "verbruikPercentage": "72.7%"
    },
    "50": {
        "voornaam": "Frederieke",
        "achternaam": "Hauser",
        "verbruik": "100000",
        "afdeling": "FHAUT",
        "geslacht": "vrouw",
        "verbruikPercentage": "18.2%"
    },
    "14": {
        "voornaam": "Marg",
        "achternaam": "Bouwhuis",
        "verbruik": "375000",
        "afdeling": "FSV",
        "geslacht": "vrouw",
        "verbruikPercentage": "68.2%"
    },
    "7": {
        "voornaam": "Ebe",
        "achternaam": "van de Braak",
        "verbruik": "400000",
        "afdeling": "DHFZ",
        "geslacht": "man",
        "verbruikPercentage": "72.7%"
    },
    "10": {
        "voornaam": "Jorrit",
        "achternaam": "Grootendorst",
        "verbruik": "400000",
        "afdeling": "DPO",
        "geslacht": "man",
        "verbruikPercentage": "72.7%"
    },
    "4": {
        "voornaam": "Desiree",
        "achternaam": "van der Kuil",
        "verbruik": "400000",
        "afdeling": "FCVB",
        "geslacht": "vrouw",
        "verbruikPercentage": "72.7%"
    },
    "18": {
        "voornaam": "Chandni",
        "achternaam": "de Kleijn",
        "verbruik": "350000",
        "afdeling": "DFIN",
        "geslacht": "vrouw",
        "verbruikPercentage": "63.6%"
    }
}

编辑:

function compareFunction(a, b) 
{
    var verbruikA = parseInt(a.verbruik);
    var verbruikB = parseInt(b.verbruik);

    if (verbruikA < verbruikB)
    {
      return -1;
    } 
    else if (verbruikA > verbruikB) 
    {
      return 1;
    } 
    else 
    {
      return 0;
    }
}
$(document).ready( function() {     

    $.ajax({
    url:"wifi_data.json",
    dataType: "json",
    success: function(data)
    {

        var item = [];
        for (var i in data) 
        {
            item.push(data[i]);
        }

        $("#container").html("<h1 id='tittel'>Top Wifi Downloaders</h1><div id='vakman'></div><p>Man</p><div id='vakvrouw'></div><p>Vrouw</p>");    



    }   
    item.sort([compareFunction]);
    });
});

1 个答案:

答案 0 :(得分:1)

首先:不保证订购Javascript对象。不要依赖它可能显示的任何感知排序行为,这取决于javascript引擎的实现,并且可以在不事先通知的情况下进行更改。

因此,请使用数组,并将您的密钥作为字段放在对象中。 e.g。

var arr = [
    {
        "id": 46,
        "voornaam": "Sergio",
        "achternaam": "Bloemenouw",
        "verbruik": "100000",
        "afdeling": "FHACI",
        "geslacht": "man",
        "verbruikPercentage": "18.2%"
    },
    {
        "id": 25,
        "voornaam": "Chayenne",
        "achternaam": "Aalberink",
        "verbruik": "200000",
        "afdeling": "FHEHT",
        "geslacht": "vrouw",
        "verbruikPercentage": "36.4%"
    }
]

现在,请看这个链接:Array.prototype.sort() - Javascript | MDN

语法为:

arr.sort([compareFunction])

如果你没有指定compareFunction,它会做一个简单的>比较,对于数字来说这很明显,对于字符串,它会进行词法比较。对象没有定义的行为,对对象数组进行排序不会做任何事情。

所以你只需要定义一个compareFunction

function compareFunction(a, b) {
    var verbruikA = parseInt(a.verbruik);
    var verbruikB = parseInt(b.verbruik);

    if (verbruikA < verbruikB) {
        return -1;
    } else if (verbruikA > verbruikB) {
        return 1;
    } else {
        return 0;
    }
}

并致电:

arr.sort(compareFunction);

更新: 如果您无法控制JSON数据的来源,那么只需遍历JSON对象并将它们全部添加到数组中,然后使用该数组对排序后的数据进行排序和存储:

var arr = [];
for (var i in data) {
    arr.push(data[i]);
}