该数组排序功能实际上如何工作?

时间:2018-09-08 15:04:25

标签: javascript arrays sorting

我正在为实践编写一些​​编码挑战,遇到了一个让我感到困惑的挑战。在阅读有关它的文章时,我遇到了我无法理解的答案。挑战在于创建一个函数,该函数以升序对整数数组进行排序并返回它。功能如下:

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

我不明白的是使用比较功能return a - b进行排序的实际方式。如果我有一个随机整数数组,并且使用了一个计算器并对每个整数应用该算术运算,则它不会导致数组升序排序,而会导致数组完全不同。因此,这告诉我,我必须完全误解它是如何工作的。有人愿意向基本没有计算机科学知识的人解释这一点吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

任何undefined值(在a或b中)都被排序到数组的末尾,而没有实际调用比较函数。

MDN

上有详细记录