Сортировка вложенных массивов в JavaScript - PullRequest
2 голосов
/ 12 октября 2011

Я совершенно не знаю, как решить эту проблему с сортировкой.
JS-объект

o={"items":[  
    {"name":"Name 1","types":[  
        {"type":"Type 4","subtype":"Sub a"}
    ]},  
    {"name":"Name 2","types":[]},  
    {"name":"Name 3","types":[  
        {"type":"Type 1","subtype":"Sub x"}  
    ]}  
]}

Я пытаюсь отсортировать по типу, что-то вроде o.sortByType ();

Array.prototype.sortByType = function(){
    this.sort(function(a,b) {
        var ap = a[types][type], bp = b[types][type];
        if(ap!=undefined||bp!=undefined){
            if (ap < bp) {return -1;}
            if (ap > bp) {return 1;}
        }else{
            return 0;
        }
    })
return this;
}

Я пытаюсь получить переупорядоченный массив:
items:
Имя 3,
Имя 1,
Имя 2

Используемая здесь функция сортировки работает для любого не вложенного свойства объектов элемента.
Если я использую [типы] [тип] в сортировке, она возвращает ошибку, «типы» не определены.
Если я использую a.types.type, он просто возвращает неизмененный массив.
Как я уже сказал, я ужасно застрял, и любая помощь или указатели будут с благодарностью.

1 Ответ

1 голос
/ 12 октября 2011

Я предполагаю, что вы хотите отсортировать массив, используя тип в качестве ключа.Вот решение:

o.items.sort(function(a,b){
    if(a.types.length == 0 || b.types.length == 0) {
        return b.types.length - a.types.length;
    }
    return a.types[0].type.localeCompare(b.types[0].type);
});

Вот пример .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...