Kei*_*h M 2 javascript arrays sorting
我有以下JavaScript代码:
const ary = ["Kevin", "brandy", "Andrew"];
const nary = ary.sort();
console.log(nary);
Run Code Online (Sandbox Code Playgroud)
我期望上面代码的输出是["Andrew","brandy", "Kevin"]根据单词的字典顺序。
但是在控制台中,我得到了输出:
["Andrew","Kevin","brandy"]
Run Code Online (Sandbox Code Playgroud)
当我切换b在"brandy"为大写B,并再次运行代码,
const ary = ["Kevin", "Brandy", "Andrew"];
const nary = ary.sort();
console.log(nary);
Run Code Online (Sandbox Code Playgroud)
输出达到预期:
["Andrew","Brandy","Kevin"]
即根据单词的字典顺序。
这意味着排序优先级将给予首字母大写的单词,然后对首字母小写的单词进行排序。
我的问题是:
为什么在JavaScript中会发生这种情况?
如何["Kevin", "brandy", "Andrew"]使用sort()函数根据单词的字典顺序对字符串数组进行排序?
Input code:
const ary = ["Kevin", "brandy", "Andrew"];
const nary = ary.sort();
console.log(nary);
Console Output:
["Andrew","Kevin","brandy"]
I want the Output as:
["Andrew","brandy", "Kevin"]
Run Code Online (Sandbox Code Playgroud)
这是因为,当没有提供回调函数时,元素将转换为UTF-16代码单元后进行排序。在您的情况下,这可能是utf转换后的字符串Kelvin之前的原因,brandy因此它按该顺序排序。
const ary = ["Kevin", "brandy", "Andrew"];
const nary = ary.sort(function(a, b) {
return a.localeCompare(b)
});
console.log(nary);Run Code Online (Sandbox Code Playgroud)
一个班轮的答案是localeCompare()
const ary = ["Kevin", "brandy", "Andrew"];
ary.sort(function (a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
});
console.log(ary);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |