2014-01-10 3 views
0

У меня есть массив объектов 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. 

То, что я бы ожидать, чтобы это произошло, что она будет иметь «Тест: [объявления]» появляясь в порядке, а затем «Тестирование: [al]» появляется в порядке.

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

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

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

Благодаря,

+0

Вы знаете, что вы можете цеплять так, как это. .LLLECC(). Replace(). Replace() ' – elclanrs

ответ

2

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

Попробуйте

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

или аналогичный.

+0

И при этом мы сортируем точно так, как вам нужно. Я думал практически о каждом шаге сравнения, за исключением возвращения значения <=>. – JonathanHayward

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