JavaScript Array sort()无法正确对字符串数组进行排序

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"]

即根据单词的字典顺序。

这意味着排序优先级将给予首字母大写的单词,然后对首字母小写的单词进行排序。

我的问题是:

  1. 为什么在JavaScript中会发生这种情况?

  2. 如何["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)

brk*_*brk 6

这是因为,当没有提供回调函数时,元素将转换为UTF-16代码单元后进行排序。在您的情况下,这可能是utf转换后的字符串Kelvin之前的原因,brandy因此它按该顺序排序。

使用localeCompare

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)


Sud*_*jha 5

一个班轮的答案是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 次

最近记录:

6 年,9 月 前