Представьте, что вам была предоставлена строка, и вам пришлось сортировать эту строку в алфавитном порядке с помощью функции. Пример:
sortAlphabets( 'drpoklj' ); //=> returns 'djklopr'
Каким будет лучший способ сделать это?
Представьте, что вам была предоставлена строка, и вам пришлось сортировать эту строку в алфавитном порядке с помощью функции. Пример:
sortAlphabets( 'drpoklj' ); //=> returns 'djklopr'
Каким будет лучший способ сделать это?
Вы можете использовать массив sort
:
var sortAlphabets = function(text) {
return text.split('').sort().join('');
};
ШАГОВ
string
в array
array
array
в string
Более новые браузеры поддерживают String.prototype.localeCompare(), что делает сортировку закодированных строк utf8
действительно простой. Обратите внимание, что разные языки могут иметь различный порядок символов. Подробнее о MDN о localCompare.
function sortAlphabet(str) {
return [...str].sort((a, b) => a.localeCompare(b));
}
console.log(sortAlphabet("drpoklj")); // Logs: "djklopr"
Как показали предыдущие ответы, вы конвертируете строку в массив односимвольных строк, сортируете их, а затем рекомбинируете в строку. Но, использование split
не лучший способ сделать этот первый шаг, потому что строка JavaScript представляет собой серию кодовых блоков UTF-16 с допустимыми недопустимыми суррогатными парами, и split("")
разделяется суррогатные пары в их отдельные кодовые единицы, потенциально разделяющие их, тем самым разбивая кодовую точку (свободно: символ), которую они должны сформировать как пара. Так что, если у вас есть смайлик в строке (например) или любой из сотен тысяч символов в незападных сценариях, они могут сломаться.
В ES5 и более ранних версиях правильное разбиение строки требовало, чтобы вы обнаруживали и обрабатывали суррогатные пары, чтобы гарантировать, что они остаются вместе, что было немного болезненно и требовало проверки charCodeAt
для определенных диапазонов значений.
Начиная с ES2015+, это действительно просто: вы просто используете итератор строки, который определен для предоставления каждой точки кода в строке, будь то единая единица кода или две. Чтобы получить массив кодовых точек, вы можете использовать итератор через расширенную запись ([...str]
) или Array.from
(Array.from(str)
).
Таким образом, используя это, мы получаем:
function sortAlphabets(str) {
return [...str].sort((a, b) => a.localeCompare(b)).join("");
}
Живой пример:
// Using the iterator
function sortAlphabets(str) {
return [...str].sort((a, b) => a.localeCompare(b)).join("");
}
// Using split("")
function sortAlphabetsUsingSplit(str) {
return str.split("").sort((a, b) => a.localeCompare(b)).join("");
}
const str = "😀देवनागरी😃";
console.log("Original string : " + str);
console.log("Using the iterator : " + sortAlphabets(str));
console.log("Using split('') : " + sortAlphabetsUsingSplit(str));
function AlphabetSoup(str) {
var arraySplit = str.split("");
var arraySort = arraySplit.sort();
var arrayJoin = arraySplit.join("");
return arrayJoin;
}
ответ выше лучше:)