создайте собственную функцию sort() в javascript

#javascript

#javascript

Вопрос:

Я хочу создать свою собственную функцию sort () для массива в javascript. Функция должна ожидать следующие строковые элементы в списке [0-9]*[A-Z][0-9]*[A-Z][0-9]* Это означает, что сначала имеется произвольное количество чисел 0-9, затем одна буква, за которыми следуют произвольные числа 0-9, затем одна буква и, наконец, произвольные числа 0-9. Теперь я хочу отсортировать этот список, но я хочу отсортировать его в обратном порядке только по буквам. Это означает, что, например, [xExCx,xQxEx,xSxEx,xSxFx] станет после сортировки [xSxFx,xSxEx,xQxEx,xExCx] , где снова x — произвольное количество чисел 0-9. Сначала она будет сортировать по первой букве (в обратном порядке), а затем по второй букве. Итак, буква E стоит перед буквой A. Возможно, кто-нибудь из вас, замечательные ребята, мог бы подтолкнуть меня в правильном направлении, я только зашел так далеко.

 function sortList(listOfNames) {
   var sortedListOfNames=new Array();
   for (i = 0; i < listOfNames.length; i  ) { 
   //Sort listOfNames
   }
}
  

Комментарии:

1. Итак, вы хотите выполнить обратную сортировку только для букв в строке? Вы хотите полностью игнорировать значения или количество цифровых цифр в любом месте строки?

2. Вы смотрели на обратный вызов для sort ? developer.mozilla.org/en/docs/Web/JavaScript/Reference/… Если вы можете создать простой фрагмент кода, который выполняет пользовательское сравнение букв, вы можете легко написать обратный вызов, который сортирует по нему.

Ответ №1:

Вы можете использовать логику сортировки, уже встроенную в массивы, и просто применить пользовательскую функцию сравнения. Предполагая, что ваш алгоритм сортировки заключается в игнорировании всех цифровых разрядов в строке и просто выполнении обратной сортировки по буквенным символам, оставшимся в строке, вы можете предоставить функцию обратного вызова сортировки для .sort() встроенного в массив объекта следующим образом:

 myArray.sort(function(a, b) {
    a = a.replace(/d/g, "");
    b = b.replace(/d/g, "");
    return b.localeCompare(a);        
});
  

Это удаляет все цифровые разряды из двух строк, затем выполняет сравнение двух строк и возвращает этот результат. .sort() Затем метод выполняет сортировку на основе этого алгоритма сравнения. Вы можете изменить порядок сортировки, просто поменяв местами a and b в localeCompare() инструкции, используя либо b.localeCompare(a) , либо a.localeCompare(b) .


Это можно было бы сделать более эффективным, извлекая регулярное выражение из функции сравнения, чтобы оно создавалось только один раз и повторно использовалось при каждом сравнении:

 var nRegex = /d/g;
myArray.sort(function(a, b) {
    a = a.replace(nRegex, "");
    b = b.replace(nRegex, "");
    return b.localeCompare(a);        
});
  

Комментарии:

1. Большое вам спасибо, именно то, что я хотел =)

2. Редактировать, неважно, что вместо этого я проверяю спецификацию функции.