JQuery сортировка объекта JSON - PullRequest
       1

JQuery сортировка объекта JSON

3 голосов
/ 20 октября 2011

У меня есть объект Json ниже в jquery, который я использую для заполнения сетки jquery.

Теперь мне нужно отсортировать его на основе "performanceName".

Пожалуйста, посоветуйте, как мне этого добиться. Пожалуйста, я знаю, что такой же вопрос был опубликован 100 раз, но я все еще пытаюсь реализовать сортировку ниже json

{
    "callback": "",
    "html": "",
    "message": [
        ""
    ],
    "responseData": [
        {
            "collectionTitleId": 1107861,
            "collectionTitleIdSpecified": true,
            "performanceField": {
                "addedDate": "6/16/2011 11:11:10 PM",
                "artist": "Corbis",
                "performanceName": "Showcase Graphic 003 - Anime Girl Purple",
                "performanceType": "Graphic",
                "provider": "DMSP Dynamic Digital"
            },
            "sortOrder": "01"
        },
        {
            "collectionTitleId": 1113513,
            "collectionTitleIdSpecified": true,
            "performanceField": {
                "addedDate": "5/25/2011 9:27:39 AM",
                "artist": "Beloved",
                "performanceName": "Hating On Your Feet (Verse)",
                "performanceType": "LabelTone",
                "provider": "p1"
            },
            "sortOrder": "02"
        }
    ],
    "status": [
        "Success"
    ]
}

Заранее спасибо

Ответы [ 2 ]

10 голосов
/ 20 октября 2011

Вы можете использовать Array.prototype.sort для сортировки массива на месте. Без каких-либо аргументов это пытается отсортировать элементы в алфавитном порядке, но вместо этого вы можете передать функцию сравнения. Эта функция получает два аргумента и должна возвращать меньше 0, 0 или больше 0, чтобы определить, где аргумент 1 должен быть по отношению к аргументу 2.

Ваша функция сортировки должна выглядеть примерно так:

data.responseData.sort(function (a, b) {
    a = a.performanceField.performanceName,
    b = b.performanceField.performanceName;

    return a.localeCompare(b);
});

Рабочая демоверсия: http://jsfiddle.net/AndyE/aC5z4/

localeCompare делает тяжелую работу по сравнению строк для нас.

0 голосов
/ 25 сентября 2015

var people = [
    { 'myKey': 'Ankit', 'status': 0 },    
    { 'myKey': 'Bhavik', 'status': 3 },
    { 'myKey': 'Parth', 'status': 7 },
    { 'myKey': 'Amin', 'status': 9 },
    { 'myKey': 'Russ', 'status': 9 },
    { 'myKey': 'Pete', 'status': 10 },
    { 'myKey': 'Ravi', 'status': 2 },
    { 'myKey': 'Tejas', 'status': 2 },
    { 'myKey': 'Dilip', 'status': 1 },
    { 'myKey': 'Piyush', 'status': 12 }
];
alert("0. At start: " + JSON.stringify(people));

//META.fn: sortData
jQuery.fn.sortData = function (prop, asc) {
        return this.sort(function (a, b) {           
            var x = a[prop];
        var y = b[prop];
            var retrunStatus = ((x < y) ? 1 : ((x > y) ? -1 : 0));
            return (asc==undefined || asc) ? (retrunStatus * -1) : retrunStatus ;        
        });
    }

people2 = $(people).sortData('myKey',false);
alert("1. After sorting (0 to x): " + JSON.stringify(people2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...