#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
раньше не использовал, но читаю об этом, пока мы говорим. Еще раз спасибо!