2016-02-10 5 views
0

При попытке отсортировать список дивы с JavaScript, результаты для повторяющихся значений противоречивы:Как получить согласованную сортировку с повторяющимися значениями, используя вторую переменную? [JavaScript]

В случае, если есть повторяющиеся значения, результат сортировки зависит от того, ДИВ первым был местом в DOM. Как мы можем сортировать эти дубликаты, чтобы независимо от порядка DOM результат был таким же, путем сортировки по второй переменной (data-foo)?

Код:

<script> 
    var $wrapper = $('.table'); 
    $wrapper.find('.cell').sort(function (b, a) { 
     return +a.getAttribute('data-number') - +b.getAttribute('data-number'); 
    }) 
    .appendTo($wrapper); 
</script> 
<div class="table"> 
    <div class="cell" data-number="15.2" data-foo="324"></div> 
    <div class="cell" data-number="15.2" data-foo="223"></div> 
    <div class="cell" data-number="52.8" data-foo="15468"></div> 
    <div class="cell" data-number="16.0" data-foo="32"></div> 
    <div class="cell" data-number="15.2" data-foo="454"></div> 
    <div class="cell" data-number="41.9" data-foo="787"></div> 
    <div class="cell" data-number="12.3" data-foo="432"></div> 
    <div class="cell" data-number="12.3" data-foo="23"></div> 
</div> 

ответ

1

Изменение функции сортировки, так он проверяет, является ли первые поля сортировки совпадают. Если они есть, он возвращает результат, основанный на втором поле сортировки.

$wrapper.find('.cell').sort(function (b, a) { 
    var number1 = +a.getAttribute('data-number'), 
     number2 = +b.getAttribute('data-number'); 
    if (number1 == number2) { 
     return +a.getAttribute('data-foo') - +b.getAttribute('data-foo'); 
    } else { 
     return number1 - number2; 
    } 
}) 

 Смежные вопросы

  • Нет связанных вопросов^_^