我正在为实践编写一些编码挑战,遇到了一个让我感到困惑的挑战。在阅读有关它的文章时,我遇到了我无法理解的答案。挑战在于创建一个函数,该函数以升序对整数数组进行排序并返回它。功能如下:
function sortAscending(arr) {
return arr.sort(function(a, b) {
return a - b;
});
}
我不明白的是使用比较功能return a - b
进行排序的实际方式。如果我有一个随机整数数组,并且使用了一个计算器并对每个整数应用该算术运算,则它不会导致数组升序排序,而会导致数组完全不同。因此,这告诉我,我必须完全误解它是如何工作的。有人愿意向基本没有计算机科学知识的人解释这一点吗?
答案 0 :(得分:3)
您的比较函数(a,b) => a-b
告诉sort
函数如何排序。换句话说,它告诉sort
如何一次比较两个值。在内部,sort
反复应用您的比较函数,直到得出排序结果为止。
如果返回值小于零,则应将a排序为小于b的索引(因此a放在数组中b之前)
如果返回值大于零,则应将a排序为大于b的索引。
如果返回值是零,则顺序应保持不变。
任何undefined
值(在a或b中)都被排序到数组的末尾,而没有实际调用比较函数。
在MDN
上有详细记录