想象一下,您被赋予了一个字符串,您必须使用函数按字母顺序对该字符串进行排序。例如:
sortAlphabets( 'drpoklj' ); //=> returns 'djklopr'
最好的方法是什么?
答案 0 :(得分:30)
您可以使用数组sort
功能:
var sortAlphabets = function(text) {
return text.split('').sort().join('');
};
<强> STEPS 强>
string
转换为array
array
array
转换回string
答案 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;
}
上面的答案更好:)