Сортировка вложенных массивов в JavaScript

#javascript #sorting

#javascript #сортировка

Вопрос:

Я полностью застрял и не знаю, как решить эту проблему сортировки.
Объект 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;
}
  

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

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

Комментарии:

1. Каково ваше условие сортировки? Вы хотите отсортировать массив по его «типу»?

Ответ №1:

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

 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);
});
  

Вот пример.

Комментарии:

1. Это очень круто! Спасибо !!! Я никогда localeCompare раньше не использовал, но читаю об этом, пока мы говорим. Еще раз спасибо!