Сортировка строки в алфавитном порядке с использованием функции

Представьте, что вам была предоставлена ​​строка, и вам пришлось сортировать эту строку в алфавитном порядке с помощью функции. Пример:

sortAlphabets( 'drpoklj' ); //=> returns 'djklopr'

Каким будет лучший способ сделать это?

Ответ 1

Вы можете использовать массив sort:

var sortAlphabets = function(text) {
    return text.split('').sort().join('');
};

ШАГОВ

  • Преобразовать string в array
  • Сортировка array
  • Преобразовать обратно array в string

Демо

Ответ 2

Более новые браузеры поддерживают String.prototype.localeCompare(), что делает сортировку закодированных строк utf8 действительно простой. Обратите внимание, что разные языки могут иметь различный порядок символов. Подробнее о MDN о localCompare.

function sortAlphabet(str) {
  return [...str].sort((a, b) => a.localeCompare(b));
}

console.log(sortAlphabet("drpoklj")); // Logs: "djklopr"

Ответ 3

Как показали предыдущие ответы, вы конвертируете строку в массив односимвольных строк, сортируете их, а затем рекомбинируете в строку. Но, использование 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));

Ответ 4

function AlphabetSoup(str) { 
    var arraySplit = str.split("");
    var arraySort = arraySplit.sort();
    var arrayJoin = arraySplit.join("");
        return arrayJoin;
}

ответ выше лучше:)