Javascript 在非字母(即亚洲)语言中,排序意味着什么?
我有一些按对象属性对表列进行排序的代码。我突然想到,在日语或汉语(非字母语言)中,发送到排序函数的字符串将与字母语言进行比较 以日本姓氏列表为例:Javascript 在非字母(即亚洲)语言中,排序意味着什么?,javascript,arrays,sorting,unicode,Javascript,Arrays,Sorting,Unicode,我有一些按对象属性对表列进行排序的代码。我突然想到,在日语或汉语(非字母语言)中,发送到排序函数的字符串将与字母语言进行比较 以日本姓氏列表为例: 寿拘 (Suzuki) 松坂 (Matsuzaka) 松井 (Matsui) 山田 (Yamada) 藤本 (Fujimoto) 当我通过Javascript对上述列表进行排序时,结果是: 寿拘 (Suzuki) 山田 (Yamada) 松井 (Matsui) 松坂 (Matsuzaka) 藤本 (Fujimoto) 这与日语的顺序不同,日语的顺
寿拘 (Suzuki)
松坂 (Matsuzaka)
松井 (Matsui)
山田 (Yamada)
藤本 (Fujimoto)
当我通过Javascript对上述列表进行排序时,结果是:
寿拘 (Suzuki)
山田 (Yamada)
松井 (Matsui)
松坂 (Matsuzaka)
藤本 (Fujimoto)
这与日语的顺序不同,日语的顺序是按语音顺序排列列表(就像日语词典那样):
我想知道的是:
总结答案和得出结论的附录: 首先,感谢所有参与讨论的人。这是非常有益的信息。为博宾塞、李瑞安、秋葵、郑杰弗里和拉里K的深入和深思熟虑的分析,向他们发出了特别的欢呼。我给Larry K打了个勾号,因为他给我指出了一个我的问题没有预见到的解决方案,但我把每一个有用的答案都打了勾 共识似乎是:
是的,角色之间进行比较。不过,它们通常是根据Unicode代码点进行比较的,平假名和汉字之间有很大的不同,这使得这种排序在日语中可能毫无用处。(汉字是从中文借来的,但它们在中文中出现的顺序与代表相同含义的平假名的顺序不一致)。为了比较,有一些排序可以使一些字符“相等”,但我不知道是否有一个汉字会被认为是相当于包含其发音的平假名——特别是因为字符可以有不同的发音。
在中文、韩文或其他没有3个不同字母的语言中(其中一个字母是非常不规则的),这可能不太成问题。这些字母按代码点值升序排序。这对人类读者来说毫无意义。为日语设计一个合理的排序方案并非不可能,但对汉字进行排序很困难(部分原因是我们不一定知道我们是在看日语还是中文),很多程序员都支持这种解决方案。字符串是逐字符比较的,其中: 字符串比较对代码点值序列使用简单的词典排序。没有人试图使用Unicode规范中定义的更复杂、面向语义的字符或字符串相等性和排序顺序定义。因此,根据Unicode标准,规范上相等的字符串可能被测试为不相等。实际上,该算法假设两个字符串都已处于标准化形式
如果您需要的不止这些,那么您将需要使用一个可以考虑排序规则的字符串比较。回想一下,在JavaScript中,您可以将一个可以自己实现排序的函数传递到sort(),以便实现对人类重要的排序:
排序(函数(a,b){
//根据两个字符串的比较返回0、1或-1
})代码>
在排序函数中,一个双字节字符真的可以与另一个进行比较吗
JavaScript中的本机字符串类型基于UTF-16代码单元,这就是比较的结果。对于基本多语言平面中的字符(所有这些都是),这与Unicode代码点相同
像Shift-JIS这样的编码中的术语“双字节”在web上下文中没有任何意义:DOM和JavaScript字符串本机是Unicode,浏览器接收到的编码页面中的原始字节早已消失
这样的结果有什么意义吗
很少。Unicode代码点不要求
寿拘 (Suzuki)
藤本 (Fujimoto)
松井 (Matsui)
松坂 (Matsuzaka)
山田 (Yamada)