小编典典

排序功能以及比较功能如何在JavaScript中起作用

javascript

正如已经问过的:sort函数与compare函数一起在JavaScript中如何工作?如果我有一个数组,array.sort(compare)现在我在书中写道,如果compare函数返回a-b(数组的两个索引),则它基于结果是否大于0,小于0或等于的事实工作0.但是,它到底如何工作?我无法解决。


阅读 343

收藏
2020-04-25

共1个答案

小编典典

“比较”功能必须采用两个参数,通常称为 ab 。然后,根据这些值 ab 使比较函数返回0,大于0或小于0 。

  1. 如果 a* 大于 b, 则返回大于0 *
  2. 如果 a* 等于 b, 则返回0 *
  3. 如果 a* 小于 b, 则返回小于0 *

使用这三个返回值和仅两个参数,可以编写一个可以对任何类型的输入数据类型或复杂数据结构进行排序的比较函数。

然后,当您使用自定义比较函数调用sort()时,将在要排序的列表中的对上调用比较函数,以确定适当的顺序。

让我们来看一个简单的示例…假设您只是对一些数字进行排序,因此我们有一个非常简单的比较函数:

function compare(a,b) {
    return a - b;
}

如果a大于b,简单地从a中减去b总是返回大于零,如果相等则返回0,如果a小于b则返回小于零。因此,它满足比较功能的要求。

现在,假设这是我们要排序的数字列表:

var numbers = [1,5,3.14];

当您调用时numbers.sort(compare),它将在内部实际执行:

compare(1,5);     // Returns -4, a is less than b
compare(1,3.14);  // Return -2.14, a is less than b
compare(5,3.14);  // returns 1.86, a is greater than b

如果您曾经进行过手动排序或按字母顺序排列,那么您所做的正是同一件事,可能没有意识到。即使您可能要比较数十个或几百个项目,您一次也经常只比较两个数字(或作者的姓氏,或其他)。再次浏览或简短列出三个数字,您将从比较前两个数字开始:

  1. 1是否大于或小于5?小于,因此将这两个数字放在我们的列表中:1,5
  2. 3.14是否大于或小于1?大于,因此在新列表中排在1之后
  3. 在我们的新列表中,3.14是否大于或小于5?小于,因此在5之前。我们的新列表现在为[1,3.14,5]

因为您可以提供自己的compare()函数,所以可以对任意复杂的数据进行排序,而不仅仅是数字。

2020-04-25