var a = ['a100', 'a1', 'a10'];
a.sort();
此记录:["a1", "a10", "a100"]
var a = ['f_a100_', 'f_a1_', 'f_a10_'];
a.sort();
但这会记录:["f_a100_", "f_a10_", "f_a1_"]
你能告诉我这是为什么吗?
最佳答案
Array.sort通过将项目转换为字符串然后进行字典排序来对值进行排序。
现在,通过字典顺序排序,他们的意思是他们将字符串字符一个一个地进行比较,直到找到一个不匹配的字符。字符集中(字母按字母顺序排列)中不匹配字符的位置决定了字符串的等级。
f_a100_
^
f_a1_
^
f_a10_
^
查看第一个不匹配的字符。这里 _
大于 0
(检查它们的 ascii 代码)所以 f_a100_
和 f_a10_
高于 f_a1_
。现在在这两者之间我们转到下一个字符
f_a100_
^
f_a10_
^
在这里,首先应用相同的逻辑 f_a100_
。所以最后的顺序是["f_a100_", "f_a10_", "f_a1_"]
这种排序顺序对于简单的字符串来说似乎是合乎逻辑的。但是对于像您这样的某些其他情况,由于字符集的排列方式,它的工作方式很奇怪。要获得所需的行为,您应该编写自己的比较函数来去除数字部分并返回正值、负值或 0 值,如示例中所示。
关于javascript - 用 JavaScript 解释这种排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21264633/