Sca*_*ola 19 javascript sorting
想象一下,你被赋予了一个字符串,你必须使用函数按字母顺序对该字符串进行排序.例:
sortAlphabets( 'drpoklj' ); //=> returns 'djklopr'
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
Tus*_*har 33
你可以使用数组sort函数:
var sortAlphabets = function(text) {
return text.split('').sort().join('');
};
Run Code Online (Sandbox Code Playgroud)
脚步
string为arrayarrayarray至stringT.J*_*der 14
正如前面的答案所示,您将字符串转换为单字符字符串数组,对其进行排序,然后将其重新组合成一个字符串。但是,使用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("");
}
Run Code Online (Sandbox Code Playgroud)
现场示例:
function sortAlphabets(str) {
return [...str].sort((a, b) => a.localeCompare(b)).join("");
}
Run Code Online (Sandbox Code Playgroud)
请注意如何使用split,某些字符已被损坏。
mar*_*ter 10
较新的浏览器支持String.prototype.localeCompare(),这使得排序utf8编码字符串非常简单.请注意,不同的语言可能具有不同的字符顺序.有关localCompare的MDN的更多信息.
function sortAlphabet(str) {
return [...str].sort((a, b) => a.localeCompare(b));
}
console.log(sortAlphabet("drpoklj")); // Logs: "djklopr"Run Code Online (Sandbox Code Playgroud)
如果您只需要支持ascii字符串,那么默认的排序实现就可以了.
function sortAlphabet(str) {
return [...str].sort();
}
Run Code Online (Sandbox Code Playgroud)