我遇到了一个奇怪的JavaScript行为。
如果我尝试排序['a', 'b','c', 'd', 'e', 'f', 'g', 'h','i', 'j']
和[].sort((a, b) => a > b)
,它将返回正确排序的数组(在这种情况下,与以前完全相同),但是如果我在数组中再添加一个项目,例如:
['a', 'b','c', 'd', 'e', 'f', 'g', 'h','i', 'j', 'k'].sort(
(a, b) => a > b
)
它返回:
["f", "a", "b", "c", "d", "e", "g", "h", "i", "j", "k"]
奇怪的是,如果我在数组中添加“ l”,它将返回:
["g", "a", "b", "c", "d", "e", "f", "h", "i", "j", "k", "l"]
(“ f”现在位于正确的位置,但“ g”不是o.O)
如果我在没有提供比较器的情况下使用
.sort
方法,则它会正确排序,但这对我没有用,因为我实际上是在尝试按属性对对象数组进行排序,例如:[{ firstName: 'Peter' }, { firstName: 'Alfred' }]
有人知道为什么会这样吗?
最佳答案
您的.sort()
比较器功能不正确。当第一个值在第二个值之前排序时,.sort()
比较器应返回负数;当第二个应该在第一个之前排序时为正数;当订购时应将它们视为相同值时,则为0。
比较器返回true
或false
,它们将被解释为1或0。因此,当a
小于b
时,比较器会告诉.sort()
它与b
相同。
字符串有一个方便的方法可用于排序:
['world', 'hello'].sort((a, b) => a.localeCompare(b));
在对数字进行排序时,您可以只返回减法运算的结果。
关于javascript - 为什么对某些数组按字母顺序排序时.sort()的行为不正确?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42212946/