Довольно часто мне приходится сталиваться с сортировкой массива в js. Но здесь появилась задача поинтересней сортировка массива с отложенной загрузкой товаров в каталоге. Основной задачей является чаще всего загрузка данных с отсортированными данными на PHP.
Благодаря встроенной в javascript функции sort можно очень просто сортировать массивы
[1, 3, 9, 2].sort(function(a,b){return a-b;}); // Returns: [1, 2, 3, 9]
Стоить заметить, что для сортировки числовых значений надо задать функциональный литерал иначе функция сортирует массив как строковые значения. Но как быть, когда нам пришел json объект с произвольными данными и нам надо отсортировать его по какому-то из значений, например, “цене товара” или “времени добавления” ? Для этого в javascript в функцию sort можно передать функцию сортировки. Вот пример, как можно сортировать json объект на javascript
[ { name: "Клиент 1", price: 2000 }, { name: "Клиент 2", price: 1000 }, { name: "Клиент 5", price: 1200 }, { name: "Клиент 3", price: 3000 } ].sort(function(obj1, obj2) { // Сортировка по возрастанию return obj1.price-obj2.price; });
Для обратной сортировки можно поменять местами первый и второй объект
[ { name: "Клиент 1", price: 2000 }, { name: "Клиент 2", price: 1000 }, { name: "Клиент 5", price: 1200 }, { name: "Клиент 3", price: 3000 } ].sort(function(obj1, obj2) { // Сортировка по убыванию return obj2.price-obj1.price; });
Сортировка массива объектов по строкам
[ { name: "Бананы", price: 2000 }, { name: "Сливы", price: 1000 }, { name: "Тыква", price: 1200 }, { name: "Ананасы", price: 3000 } ].sort(function(obj1, obj2) { if (obj1.name < obj2.name) return -1; if (obj1.name > obj2.name) return 1; return 0; });