Javascript 这个数组排序函数实际上是如何工作的?

Javascript 这个数组排序函数实际上是如何工作的?,javascript,arrays,sorting,Javascript,Arrays,Sorting,我当时正在练习一些编码挑战,遇到了一个让我难堪的问题。读了一篇关于它的文章,我发现了答案,但我无法理解。挑战在于创建一个函数,以升序对整数数组进行排序并返回它。功能如下: function sortAscending(arr) { return arr.sort(function(a, b) { return a - b; }); } 我不明白的是,使用比较函数返回a-b进行排序实际上是如何工作的。如果我有一个随机整数数组,我用一个计算器对每个数组进行算术运算,

我当时正在练习一些编码挑战,遇到了一个让我难堪的问题。读了一篇关于它的文章,我发现了答案,但我无法理解。挑战在于创建一个函数,以升序对整数数组进行排序并返回它。功能如下:

function sortAscending(arr) {
    return arr.sort(function(a, b) {
        return a - b;
    });
}

我不明白的是,使用比较函数
返回a-b
进行排序实际上是如何工作的。如果我有一个随机整数数组,我用一个计算器对每个数组进行算术运算,它不会得到一个按升序排序的数组,而是得到一个完全不同的数组。这说明我一定完全误解了这是怎么回事。有人愿意向基本上不懂计算机科学的人解释一下吗?

您的比较函数
(a,b)=>a-b
告诉
排序
函数如何排序。换句话说,它告诉
sort
如何一次比较两个值。在内部,
sort
重复应用比较函数,直到得到排序结果

如果返回值小于零,则应将a排序为小于b的索引(因此a放在b之前的数组中)

如果返回值大于零,则应将a排序为大于b的索引

如果返回值为零,则顺序应保持不变

任何
未定义的
值(在a或b中)被排序到数组的末尾,而不实际调用比较函数


比较函数
(a,b)=>a-b
告诉
排序
函数如何排序。换句话说,它告诉
sort
如何一次比较两个值。在内部,
sort
重复应用比较函数,直到得到排序结果

如果返回值小于零,则应将a排序为小于b的索引(因此a放在b之前的数组中)

如果返回值大于零,则应将a排序为大于b的索引

如果返回值为零,则顺序应保持不变

任何
未定义的
值(在a或b中)被排序到数组的末尾,而不实际调用比较函数


这在

上有很好的记录,
sort
函数实际上正在进行排序。内部函数是一个比较器。如果减去两个数,结果为负数,则第一个数小于第二个数。查看
sort
如何使用给定的函数。我建议拿一张纸和一支铅笔,手工完成一个小例子。请务必阅读
sort()
的文档,以便了解回调函数的返回值是如何使用的。Accepted将是一个很好的起点,可能与我曾经在quora上写的一个长答案相同。也许这会有帮助,因为
sort
函数实际上正在进行排序。内部函数是一个比较器。如果减去两个数,结果为负数,则第一个数小于第二个数。查看
sort
如何使用给定的函数。我建议拿一张纸和一支铅笔,手工完成一个小例子。请务必阅读
sort()
的文档,以便了解回调函数的返回值是如何使用的。Accepted将是一个很好的起点,可能与我曾经在quora上写过的一个长答案重复。也许这会帮助你正确。这就是许多编程语言中排序方法的工作原理。你是对的。这就是许多编程语言中排序方法的工作原理。