Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中按字典顺序对数组排序_Javascript - Fatal编程技术网

在javascript中按字典顺序对数组排序

在javascript中按字典顺序对数组排序,javascript,Javascript,为什么这个代码 ["Q", "fP", "AQ", "L"].sort((a,b) => a.localeCompare(b)) 给出以下结果: ["AQ", "fP", "L", "Q"] 我想它会给我这个(这就是我需要的): 所有大写字母都在小写字母之前不要使用localeCompare(),直接使用sort() 让myA

为什么这个代码

["Q", "fP", "AQ", "L"].sort((a,b) => a.localeCompare(b))
给出以下结果:

["AQ", "fP", "L", "Q"]
我想它会给我这个(这就是我需要的):


所有大写字母都在小写字母之前

不要使用
localeCompare()
,直接使用
sort()

让myArray=[“Q”、“fP”、“AQ”、“L”];
myArray.sort();

log(myArray)不要使用
localeCompare()
,直接使用
sort()
。详情如下:

["Q", "fP", "AQ", "L"].sort();
试试这个:

让myArray=[“Q”、“fP”、“AQ”、“L”];
排序((a,b)=>a>b?1:-1);

log(myArray)[“Q”、“fP”、“AQ”、“L”]。sort()会给你这个output@AdamOrlov所有大写字母都在小写字母之前,你会认为
a.localeCompare(b,“en”{sensitivity:'case',caseFirst:'upper”})
会起作用。。。但事实并非如此。@Rachidoussana认为字典顺序的定义是Java特有的,并且不是通用的。字典的顺序不是所有单词都以大写字母开头,然后是所有小写字母。它们已经存在了几个世纪了。恰好字母字符的ASCII码序列在小写之前列出了大写字母。localeCompare试图解决这个问题。你最后的评论毫无意义。NodeJS和JavaScript基于ECMAScript,因此内置方法应该没有区别。在我尝试的每个浏览器ECMAScript实现中,上面的两个代码片段在所有其他字符串之后都以“fP”排序。另外,
(a,b)=>a>b
不会进行一致排序,因为它将返回
false
(0),其中
a==b
a
,而不是分别返回0和-1。如果未定义比较函数,则应使用内部函数,它有效地使用了
,因此使用了,它返回到代码单元,因此根本不依赖于实现。nodejs演示程序的排序与浏览器的排序完全相同。我根本看不到这一点。在演示中运行代码将排序为
['AQ','L','Q','Q','fP']
。V8代码中的行使用
,按照ECMA-262实现排序,它按代码单位而不是按字典顺序排序(因为ASCII代码单位不按字典顺序排序)。当然,
`${a}<${b}`,a>b
应该是
`${a}<${b}`,a
,因为正如我前面所说,排序函数被破坏了。只需将其排序为
myArray.sort()
,结果是一致的。如果您将排序函数修改为
返回ab?1 : 0;,这是内置排序函数的功能。
["Q", "fP", "AQ", "L"].sort();