使用函数按字母顺序对字符串进行排序

时间:2015-06-18 10:19:11

标签: javascript sorting

想象一下,您被赋予了一个字符串,您必须使用函数按字母顺序对该字符串进行排序。例如:

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

最好的方法是什么?

4 个答案:

答案 0 :(得分:30)

您可以使用数组sort功能:

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

<强> STEPS

  1. string转换为array
  2. 排序array
  3. array转换回string
  4. Demo

答案 1 :(得分:10)

较新的浏览器支持String.prototype.localeCompare(),这使得排序utf8编码的字符串非常简单。请注意,不同的语言可能具有不同的字符顺序。有关MDN about localCompare的更多信息。

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

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

如果你只需要支持ascii字符串,那么默认的排序实现就可以了。

function sortAlphabet(str) {
  return [...str].sort();
}

答案 2 :(得分:4)

如先前的答案所示,您可以将字符串转换为单字符字符串数组,对其进行排序,然后将其重新组合为字符串。 但是,使用split并不是第一步的最佳实践,因为JavaScript字符串是一系列UTF-16代码单元,可以接受无效的代理对,并且{{ 1}}将代理对分成各自的代码单元,可能会将它们分开,从而破坏了应该组合成对的代码 point (宽松地:字符)。因此,如果您在字符串中有一个表情符号(例如)或非西方脚本中成千上万个字符中的任何一个,则这些字符可能会损坏。

在ES5和更早版本中,正确分割字符串要求您检测并处理代理对以确保它们保持在一起,这有点麻烦,并且需要检查split("")的特定值范围。

从ES2015 +开始,这确实很容易:您只需使用字符串的迭代器,该迭代器定义为在字符串中提供每个代码 point ,无论是单个代码单元还是两个代码单元。要获取代码点数组,可以通过扩展符号(charCodeAt[...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));弄乱了某些字符。

答案 3 :(得分:0)

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

上面的答案更好:)