我有以下JavaScript代码:
const ary = ["Kevin", "brandy", "Andrew"];
const nary = ary.sort();
console.log(nary);
我希望上述代码的输出为["Andrew","brandy", "Kevin"]
,即根据单词的字典顺序。
但是在控制台中,我得到了输出:
["Andrew","Kevin","brandy"]
当我将b
中的"brandy"
切换为大写B
并再次运行代码时,
const ary = ["Kevin", "Brandy", "Andrew"];
const nary = ary.sort();
console.log(nary);
输出符合预期:
["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"]
答案 0 :(得分:4)
这是因为,当没有提供回调函数时,元素将转换为UTF-16代码单元后进行排序。对于您而言,这可能是Kelvin
的utf转换字符串在brandy
之前的原因,因此它按该顺序排序。
const ary = ["Kevin", "brandy", "Andrew"];
const nary = ary.sort(function(a, b) {
return a.localeCompare(b)
});
console.log(nary);
答案 1 :(得分:0)
只需先将键转换为lowerCase
,以使键变得不区分大小写。发生这种情况的原因是因为Javascript比较的方式,即['a'<'A'],您可以使用Local compare。根据浏览器设置进行比较。
let arr = ["Andrew","brandy", "Kevin"];
let sorted = arr.sort((a,b) => {
a.toLowerCase() > b.toLowerCase();
})
console.log(sorted);
答案 2 :(得分:0)
一个衬里答案是localeCompare()
const ary = ["Kevin", "brandy", "Andrew"];
ary.sort(function (a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
});
console.log(ary);