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