javascript - 这个数组排序功能实际上是如何工作的?

标签 javascript arrays sorting

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

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

我无法理解的是使用比较函数return a - b进行排序实际上是如何工作的。如果我有一个随机整数数组,并且使用计算器并对每个整数应用算术运算,则它不会产生按升序排序的数组,而是会产生完全不同的数组。所以这告诉我我一定完全误解了它是如何工作的。有人愿意向基本上没有计算机科学知识的人解释这一点吗?

最佳答案

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

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

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

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

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

这在 MDN 上有详细记录

关于javascript - 这个数组排序功能实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52236549/

相关文章:

javascript - 为演示页面交换样式表 OnClick

c++ - 使用二分搜索从数组中删除字符串

c++ - 如何在 C++ 中打印案例的运行时间

Python - 列表的排序列表

c# - 从服务器端到 Javascript 的时区不正确

javascript - 当值可选时,如何在 Javascript/jQuery 中将 url 拆分为键值对

javascript - 使用 jQuery 按类的下一个实例选择

javascript - Javascript 中具有非数字索引的多维数组

python - 如何存储非均匀 numpy 数组列表?

database - Postgresql - 使用特殊字符、数字和字母对字符字段进行排序