joh*_*ohn 5 javascript sorting collation
我正在处理如下所示的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,以及其他字符串在这里如何排序?
太棒了;浏览器特定实现。最近“标准化”。\n在我的回答中,我认为问题不是关于.sort()JS 中的数组方法,而是关于.localeCompare()字符串方法的输出。如果我们去MDN对该方法的描述https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare我们可以找到定义:
\n\n\nlocaleCompare() 方法返回一个数字,指示引用字符串在排序顺序中是位于给定字符串之前还是之后,或者是否与给定字符串相同。
\n
以及规范链接:https://www.ecma-international.org/ecma-262/6.0/#sec-string.prototype.localecompare。该规范有以下摘录:
\n\n\n\n\n当使用参数that调用 localeCompare 方法时,它返回NaN以外的数字,表示 this 值(转换为字符串)与that 值(转换为字符串)的区域设置敏感字符串比较的结果。这两个字符串是S和That。这两个字符串以实现定义的方式进行比较。结果旨在按照主机默认区域设置指定的排序顺序对字符串值进行排序...
\n
您可以找到 Chromium 的“bug”报告“ localeCompare 实现与其他浏览器不同”:https://bugs.chromium.org/p/v8/issues/detail ?id=459 ?id=459, - 示例如下:
\n\nin v8 version 1.3.13.5, i get these results for the final sort:\nA,R,Z,a,q,z,\xc3\xa4,\xc3\xa6\n\nsafari produces:\nA,a,\xc3\xa4,\xc3\xa6,q,R,Z,z\n\nfirefox produces:\na,A,\xc3\xa4,\xc3\xa6,q,R,z,Z\n以及答案之一:
\n\n\n\n\n将功能请求标记为当前实现并不违反规范。
\n
目前 AFAIK 用于比较 i18nIntl API规范。您可以在规范中找到有关比较规则的更多信息:https://www.ecma-international.org/ecma-402/2.0/#collator-objects。本文档还包含有关比较选项的注释:
\n\n\nUnicode 技术标准 35 描述了十个与排序规则相关的区域设置扩展键:“co”用于排序规则使用和专门化,“ka”用于替代处理,“kb”用于后向第二级权重,“kc”用于大小写级别,“kn”对于数字,“kh”表示平假名四进制,“kk”表示标准化,“kf”表示大小写优先,“kr”表示重新排序,“ks”表示排序规则强度,“vt”表示变量顶部。
\n
所以你可以将输出调整到一定的水平。我希望这对您有帮助,谢谢:)
\n| 归档时间: | 
 | 
| 查看次数: | 256 次 | 
| 最近记录: |