我遇到了一个奇怪的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。

比较器返回truefalse,它们将被解释为1或0。因此,当a小于b时,比较器会告诉.sort()它与b相同。

字符串有一个方便的方法可用于排序:

['world', 'hello'].sort((a, b) => a.localeCompare(b));


在对数字进行排序时,您可以只返回减法运算的结果。

关于javascript - 为什么对某些数组按字母顺序排序时.sort()的行为不正确?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42212946/

10-14 12:06
查看更多