gpt4 book ai didi

javascript - array.sort() 方法中反向比较函数背后的逻辑

转载 作者:搜寻专家 更新时间:2023-11-01 05:04:21 25 4
gpt4 key购买 nike

现在我知道这对很多人来说都是一个愚蠢的问题,但我无法理解这种逻辑。所以,问题简而言之:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a-b});

现在假设比较值 40 和 100,因此比较函数返回负值,即 -60。所以,40 放在 100 之前。明白了。

现在,我这样做:

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b-a});

同样,如果将 100 和 40 进行比较,比较函数将返回一个正值,即 60。现在,由于该正返回值,它不应该将 100 放在 40 之后吗?但事实并非如此,我不明白。

我只想知道这里发生了什么。

最佳答案

您的比较函数完全正确 - 您使用的是减法,与分支相比速度非常快,实际上是典型处理器在比较两个整数值时所做的。本质上:

  • 如果您的比较函数返回 0,则两者的顺序无关紧要。
  • 如果您的比较函数返回小于 0(无论多远),第一个参数应该在第二个参数之前。
  • 如果您的比较函数返回大于 0(同样,多远并不重要),第二个参数应该在第一个参数之前。

这最后一点是您在逻辑上感到困惑的地方 - 在您的脑海中,您翻转了值的顺序 将“之前”更改为“之后”,这使语句立即返回再次回到第一个。 :) 请记住 - 参数的名称或它们在函数中发生的任何事情都无关紧要 - 这只是它们在函数参数中出现的顺序以及相应的结果返回。

关于javascript - array.sort() 方法中反向比较函数背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34092856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com