Вопрос

У меня есть массив объектов JavaScript, которые имеют строковое описание.Я пытаюсь реализовать упрощенный алгоритм сортировки, который отбрасывает регистр, удаляет HTML-теги, а затем удаляет все, кроме букв и цифр.У меня есть:

DASHBOARD.todo_entries.sort(function(first, second)
  {
  var first_workbench = first.description.toLowerCase();
  var second_workbench = second.description.toLowerCase();
  first_workbench = first_workbench.replace(/<.*?>/, '');
  second_workbench = second_workbench.replace(/<.*?>/, '');
  first_workbench = first_workbench.replace(/[^_\w]/, '');
  second_workbench = second_workbench.replace(/[^_\w]/, '');
  console.log('"' + first_workbench + '", "' + second_workbench + '"');
  return (first_workbench > second_workbench);
  });

В настоящее время это последовательно генерирует порядок сортировки с описаниями:

Testing: d.
Testing: e.
Test: a.
Testing: f.
Test: c.
Test: b.
Testing: g.
Testing: b.
Testing: a.
Test: d.
Testing: c.
Testing: h.
Testing: i.
Testing: j.
Testing: k.
Testing: l.

Чего я бы ожидал, так это того, что у него будет "Тест:[a-d]"появляются по порядку, а затем "Тестируются:[a-l]" появляются по порядку.

Я не уверен, как закодировать что-то, что естественным образом сгенерировало бы этот порядок;это не соответствует их порядку создания (я думаю, что время создания / порядок "Теста:[a-d]" и "Тестирование:[a-l]" перекрываются, но они были созданы по отдельности в последовательном порядке).

Я получаю похожие, но не идентичные результаты, если я просто настрою функцию для сравнения неизмененных описаний с любым из них < или >.По крайней мере, в рамках "Test" / "Тестирование" неизмененный лексикографический поиск должен совпадать с результатами поиска, который я хочу.Я немного покопался в своем коде и не нашел ничего другого, явно нарушающего порядок этого массива.

Что-нибудь показалось вам неправильным?

Спасибо,

Это было полезно?

Решение

JS Array.sort метод использует функцию сравнения cmp(a, b) это должно вернуться 1 или другое положительное число (указывающее a < b), -1 или другое отрицательное число (указывающее b > a), или 0 (с указанием эквивалентных значений) - смотрите Документы MDN.Ваш возвращает логическое значение, фактически только 1 или 0, так что он не будет отсортирован корректно.

Попробуй

return first_workbench === second_workbench ? 0 :
    first_workbench > second_workbench ? 1 : -1;

или что-то подобное.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top