jQuery: сортировка списка по двум параметрам - PullRequest
0 голосов
/ 29 марта 2019

Мне нужно отсортировать список div по двум значениям.В моем примере, div с самой короткой продолжительностью должен быть в верхней части списка.Пока у меня все получилось.НО, если у меня есть два div с одинаковой длительностью, функция сортировки должна иметь один сверху, который имеет самую короткую продолжительность и самую низкую цену.

Как объединить две функции такого рода?

Результат должен быть:

Duration: 500 - Price: 190
Duration: 500 - Price: 250
Duration: 600 - Price: 100
Duration: 700 - Price: 130

var List__fastest = "";
List__fastest = $("div");
List__fastest.sort(function (a, b) { return $(a).data("duration") - $(b).data("duration") });

$("#result").html(List__fastest);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<div data-duration="700" data-price="130">Duration: 700 - Price: 130</div>
<div data-duration="500" data-price="250">Duration: 500 - Price: 250</div>
<div data-duration="600" data-price="100">Duration: 600 - Price: 100</div>
<div data-duration="500" data-price="190">Duration: 500 - Price: 190</div>

<div id="result"></div>

1 Ответ

1 голос
/ 29 марта 2019

По сути, если результат сравнения первой вещи, по которой вы хотите отсортировать, состоит в том, что они не равны, верните этот результат; в противном случае верните результат сравнения второй вещи, по которой вы хотите отсортировать. Вы можете сделать это с помощью необычайно мощного оператора || в JavaScript:

setTimeout(function() {
  var List__fastest = "";
  List__fastest = $("div");
  List__fastest.sort(function (a, b) {
      return $(a).data("duration") - $(b).data("duration") // First by this
          || $(a).data("price") - $(b).data("price");      // Then by this
  });

  $("#result").html(List__fastest);
}, 800);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<div data-duration="700" data-price="130">Duration: 700 - Price: 130</div>
<div data-duration="500" data-price="250">Duration: 500 - Price: 250</div>
<div data-duration="600" data-price="100">Duration: 600 - Price: 100</div>
<div data-duration="500" data-price="190">Duration: 500 - Price: 190</div>

<div id="result"></div>

Очевидно, измените порядок сравнений, если вы хотите сначала отсортировать по цене, а затем по продолжительности. (Оба способа заканчиваются самой низкой продолжительностью и самой низкой ценой в первый раз.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...