У меня есть массив объектов в JavaScript, каждый из которых в свою очередь имеет массив:
{
category: [
{ name: "Cat1", elements : [
{ name: name, id: id } ]
},
{ name: "Cat2", elements : [
{ name: name, id: id },
{ name: name, id: id },
{ name: name, id: id } ]
},
{ name: "Cat3", elements : [
{ name: name, id: id },
{ name: name, id: id } ]
}
]
}
Я хотел бы отсортировать массив "категория" на основе количества объектов во вложенном массиве "элементы".
Например, после сортировки, вышеупомянутый объект мог бы быть похожим на этот (убывание):
{
category: [
{ name: "Cat2", elements : [
{ name: name, id: id },
{ name: name, id: id },
{ name: name, id: id } ]
},
{ name: "Cat3", elements : [
{ name: name, id: id },
{ name: name, id: id } ]
},
{ name: "Cat1", elements : [
{ name: name, id: id } ]
}
]
}
Я задаюсь вопросом, возможно ли выполнить этот вид JavaScript использования () метод. Какие-либо предложения?
Заранее спасибо!
Метод sort
принимает функцию, в которой вы можете определить как сравнить два элемента. Здесь соответствующая документация .
compareFunction Определяет функцию , которая определяет порядок сортировки. Если не указано, массив сортируется лексикографически (в порядке словаря) в соответствии с в строку преобразование каждого элемента.
Если предоставляется compareFunction, элементы массива сортируются в соответствии с возвращаемым значением функции сравнения. Если a и b - два сравниваемых элемента, то:
Если compareFunction (a, b) меньше 0, отсортировать a по индексу с меньшим, чем b.
Если compareFunction (a, b) возвращает 0, оставьте a и b неизменными по отношению друг к другу, но отсортированными по всем различным элементам. Примечание: стандарт ECMAscript не гарантирует такого поведения, и поэтому не все браузеры (например, версии Mozilla, начиная с 2003 года) соблюдают это.
Если compareFunction (a, b) больше 0, отсортировать b по индексу ниже, чем a.
var sorted_categories = original.category.sort(function (one, other) {
//a - b is
// 0 when elements are the same
// >0 when a > b
// <0 when a < b
return one.elements.length - other.elements.length;
});
var category = [
{ name: "Cat1", elements : [
{ name: name, id: id } ]
},
{ name: "Cat2", elements : [
{ name: name, id: id },
{ name: name, id: id },
{ name: name, id: id } ]
},
{ name: "Cat3", elements : [
{ name: name, id: id },
{ name: name, id: id } ]
}
];
function myAbcSort(a, b){
if(a.elements.length > b.elements.length) {
return -1;
} else {
return 1;
}
}
category.sort(myAbcSort);