#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. Редактировать, неважно, что вместо этого я проверяю спецификацию функции.