Сортировка DOM элементов с jQuery

Опубликовано

Очень часто может возникнуть ситуация когда необходима сортировка html элементов в DOM с помощью javascript.

Для решения данной задачи можно воспользоваться встроенной функцией sort.

Например, у нас есть вот такой неупорядоченный список.

<button class="sort-elements">Сортировать</button>

<div class="sorting">
    <ul class="elements">
        <li>Элементы</li>
        <li>Для</li>
        <li>Проверки</li>
        <li>Сортировки</li>
        <li>На</li>
        <li>jQuery</li>
    </ul>
</div>

Для его сортировки можно использовать следующий метод

$('.sort-elements').click(function(){
    var $elements = $('.elements li');
    var $target = $('.sorting ul');
    
    $elements.sort(function (a, b) {
        var an = $(a).text(),
            bn = $(b).text();
        
        if (an && bn) {
            return an.toUpperCase().localeCompare(bn.toUpperCase());
        }
        
        return 0;
    });
    
    $elements.detach().appendTo($target);
});

Или вот здесь можно посмотреть рабочий пример сортировки.

Как отсортировать json объект на javascript

Опубликовано

Благодаря встроенной в javascript функции sort можно очень просто сортировать массивы

[1, 3, 9, 2].sort(function(a,b){return a-b;});
  // Returns: [1, 2, 3, 9]

UPD: Стоить заметить, что для сортировки числовых значений надо задать функциональный литерал иначе функция сортирует массив как строковые значения.

Но как быть, когда нам пришел 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;
});

UPD: Сортировка массива объектов по строкам

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