Dan*_*tiz 0 javascript arrays sorting
我遇到了一个奇怪的 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
)
Run Code Online (Sandbox Code Playgroud)
它返回:
["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”不是 oO)
如果我.sort在不提供比较器的情况下使用该方法,它会正确排序,但这对我来说没有用,因为我实际上是在尝试按属性对对象数组进行排序,例如:
[{ firstName: 'Peter' }, { firstName: 'Alfred' }]
有谁知道为什么会发生这种情况?
您的.sort()比较器功能不正确。当第一个值排序在第二个值之前时,比较.sort()器应返回负数;当第二个应该排序在第一个之前时为正数;和 0 时,出于订购目的应将它们视为相同的值。
您的比较器返回trueor false,它将被解释为 1 或 0。因此,当a小于 时b,您的比较器告诉.sort()它与相同b。
字符串有一个方便的方法,非常适合排序:
['world', 'hello'].sort((a, b) => a.localeCompare(b));
Run Code Online (Sandbox Code Playgroud)
对数字进行排序时,只需返回减法运算的结果即可。
| 归档时间: |
|
| 查看次数: |
383 次 |
| 最近记录: |