【发布时间】:2019-03-27 05:13:09
【问题描述】:
我正在编写如下所示的 Javascript 代码:
let arr = [
'1 Hello',
'2 Hello',
'3 Hello',
'4 Hello',
';1',
'z',
'%1',
'110 Hello',
'100 Hello',
'a',
'Z',
'00',
'21 Hello',
'9 Hello',
'13 Hello',
'10000 Hello',
'0 Hello',
'A'
];
arr.sort( (a, b) => {
return a.localeCompare(b, 'en', {
numeric: true
})
} ).forEach( ml => { console.log(ml) });
上面的 Javascript 正在打印以下 o/p:
;1
%1
00
0 Hello
1 Hello
2 Hello
3 Hello
4 Hello
9 Hello
13 Hello
21 Hello
100 Hello
110 Hello
10000 Hello
a
A
z
Z
=> undefined
问题陈述:
我想知道为什么在 o/p 中 ;1 出现在 %1 之前以及其他字符串如何在这里排序?
【问题讨论】:
-
我想这只是字母/Unicode 代码点顺序。通过指定
numeric: true、"1" < "2" , "10",而不是默认的字母字符串排序,其中"1" < "10" < "2"。 -
它叫做Lexicographical order。我猜
;出现在%之前,就像a出现在z之前。交替的情况也很有趣。以下是一些相关阅读:sitepoint.com/sophisticated-sorting-in-javascript -
@TylerRoper 不,按代码点,
%先出现(然后是数字),然后是;。 -
@melpomene 你说得对。
-
因为默认情况下它们会单独处理标点符号。您可以使用
ignorePunctuation选项来避免它。
标签: javascript sorting collation