Невозможно отсортировать десятичные дроби с начальным нулем. ListJS - PullRequest
0 голосов
/ 02 октября 2018

Я использую List.js (v1.5.0) для добавления сортировки в таблицу и не могу получить мои десятичные значения для правильной сортировки.Десятичные значения сортируются с помощью «стандартной сортировки», а не «естественной сортировки».Сортировка следующей таблицы по «EC AVG» приводит к неправильной сортировке.Кажется, он не распознает ведущие нули после десятичной дроби.

Link to the incorrectly sorted table

Вот фрагмент таблицы HTML:

<div id="sort-me" class="tableFixHead">
  <table class="table mdl-shadow--4dp" id="myTable" >
    <thead>
      <tr>
        <th class="sort" data-sort="unit_name">Unit Name</th>
        <th class="sort" data-sort="ec_average">EC Avg</th>
        <th class="sort" data-sort="ph_average">pH Avg</th>
        <th class="sort" data-sort="ec_min">EC Min</th>
        <th class="sort" data-sort="ec_max">EC Max</th>
        <th class="sort" data-sort="ph_min">pH Min</th>
        <th class="sort" data-sort="ph_max">pH Max</th>
      </tr>
    </thead>
    <tbody class="list">
     <tr>
      <td class="unit_name">Fake Unit 1</td>
      <td class="ec_average" >0.01</td>
      <td class="ph_average" >6.26</td>
      <td class="ec_min" >0.01</td>
      <td class="ec_max" >0.01</td>
      <td class="ph_min" >6.14</td>
      <td class="ph_max" >6.38</td>  
     </tr>
     <tr>
      <td class="unit_name">Fake Unit 2</td>
      <td class="ec_average" >0.3</td>
      <td class="ph_average" >6.41</td>
      <td class="ec_min" >0.3</td>
      <td class="ec_max" >0.01</td>
      <td class="ph_min" >5.68</td>
      <td class="ph_max" >6.44</td>  
     </tr>
     <tr>
      <td class="unit_name">Fake Unit 3</td>
      <td class="ec_average" >0.03</td>
      <td class="ph_average" >6.13</td>
      <td class="ec_min" >0.01</td>
      <td class="ec_max" >0.05</td>
      <td class="ph_min" >5.62</td>
      <td class="ph_max" >6.33</td>  
     </tr>
     <tr>
      <td class="unit_name">Fake Unit 4</td>
      <td class="ec_average" >0.5</td>
      <td class="ph_average" >4.81</td>
      <td class="ec_min" >0.3</td>
      <td class="ec_max" >0.55</td>
      <td class="ph_min" >5.68</td>
      <td class="ph_max" >6.24</td>  
     </tr>
     <tr>
      <td class="unit_name">Fake Unit 5</td>
      <td class="ec_average" >0.05</td>
      <td class="ph_average" >4.93</td>
      <td class="ec_min" >0.01</td>
      <td class="ec_max" >0.07</td>
      <td class="ph_min" >5.64</td>
      <td class="ph_max" >6.13</td>  
     </tr>
    </tbody>
  </table>
</div>

Наряду сследующие параметры и инициализатор List.js:

var sorting_options = {
  valueNames: ['unit_name', 'ec_average', 'ec_min', 'ec_max', 'ph_average', 'ph_min', 'ph_max']
};

var statusList = new List('sort-me', sorting_options);

Мой вариант использования является довольно стандартной проблемой сортировки, поэтому я чувствую, что, возможно, просто упускаю что-то, что было нелегко отследить вдокументация.

Есть идеи, почему сортировка десятичных чисел с помощью List.js не работает?

1 Ответ

0 голосов
/ 03 октября 2018

Это соответствует предполагаемому поведению метода сортировки, используемого List.js (https://github.com/nwoltman/string-natural-compare).

). Этот алгоритм сортировки фактически не обрабатывает каждую строку как одно десятичное число, он обрабатывает десятичную точкукак точка, и сортирует вещи после десятичной точки, как если бы они были целыми числами с нулем.

Вы должны будете предоставить List.js свою собственную функцию сортировки. Для List.js документы :

Функция сортировки по умолчанию находится здесь https://github.com/nwoltman/string-natural-compare,, если вы хотите использовать свою собственную, прочитайте код и проверить тесты .

Что не очень полезно, но все готово. Сканирование кода выглядит как передача свойства sortFunction во второй аргумент конструктора..

Обновление: Я нашел соответствующий тест. Обратите внимание на "немного не так" в описании теста.

...