Javascript 排序比较的幕后花絮

Behind the scenes of Javascript sort comparison

提问人:Payette1996 提问时间:5/25/2022 更新时间:5/25/2022 访问量:112

问:

const arr = [3, 89, 1, 120, 23];
console.log(arr.sort((a, b) => a - b));

上面的代码对数组进行排序。 但是,排序如何知道 a = 当前索引和 b = 下一个索引??? 我们从不指定对它们是什么以及它们等于什么进行排序。

之后,.sort 如何确定该匿名箭头函数返回的值意味着需要移动该值?示例:[1, 2]

sort((a, b) => a - b))
sort((1, 2) => 1 - 2))
sort((1, 2) => -1))
sort(-1));

看?.sort 怎么知道该怎么处理 -1?

在过去的 2 个小时里,我一直在谷歌搜索和 YouTubing,但找不到答案...... :(

JavaScript 数组排序 比较比较

评论


答:

0赞 mikenlanggio 5/25/2022 #1

但是,排序如何知道 a = 当前索引和 b = 下一个索引?

不,是当前值,是下一个值。
您看到的函数不仅运行一次,而且会一次又一次地运行,具体取决于数组的长度。
在您的情况下,在第一次运行中,等于和 .第二次运行,等于 ,等于 .
absorta3b89a3b1

该函数适用于字符串数组,因此,如果您需要对字符串数组进行排序,则在需要对数值数组进行排序时只需要使用
即可。
如果不是,则得到错误的结果:“25”大于“100”,因为“2”大于“1”。
sortarray.sort()Compare function

Compare function只需返回三种数字:

  1. 负数 (-1,-2,...):表示小于ab
  2. 零 (0):表示等于ab
  3. 正数 (1,2,3..):表示大于ab

所以,你可以更清楚地回到里面,这样:Compare function

if(a === b)
    return 0;
if(a < b)
    return -1;
return 1;

但是,更简单的是,您可以使用一个技巧,您只需要确定是否大于。return a-bab

查看更多:JavaScript 排序数组