提问人:Payette1996 提问时间:5/25/2022 更新时间:5/25/2022 访问量:112
Javascript 排序比较的幕后花絮
Behind the scenes of Javascript sort comparison
问:
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,但找不到答案...... :(
答:
0赞
mikenlanggio
5/25/2022
#1
但是,排序如何知道 a = 当前索引和 b = 下一个索引?
不,是当前值,是下一个值。
您看到的函数不仅运行一次,而且会一次又一次地运行,具体取决于数组的长度。
在您的情况下,在第一次运行中,等于和 .第二次运行,等于 ,等于 .a
b
sort
a
3
b
89
a
3
b
1
该函数适用于字符串数组,因此,如果您需要对字符串数组进行排序,则在需要对数值数组进行排序时只需要使用
即可。
如果不是,则得到错误的结果:“25”大于“100”,因为“2”大于“1”。sort
array.sort()
Compare function
Compare function
只需返回三种数字:
- 负数 (-1,-2,...):表示小于
a
b
- 零 (0):表示等于
a
b
- 正数 (1,2,3..):表示大于
a
b
所以,你可以更清楚地回到里面,这样:Compare function
if(a === b)
return 0;
if(a < b)
return -1;
return 1;
但是,更简单的是,您可以使用一个技巧,您只需要确定是否大于。return a-b
a
b
查看更多:JavaScript 排序数组
评论