Как отсортировать массив объектов на основе длина вложенного массива в JavaScript

У меня есть массив объектов в 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 использования () метод. Какие-либо предложения?

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

5
задан Travis 20 February 2010 в 10:34
поделиться

2 ответа

Метод 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;
});
16
ответ дан 18 December 2019 в 11:55
поделиться
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);
-1
ответ дан 18 December 2019 в 11:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: