在经历了13年的JavaScript编程之后,我终于找到了一种方法来记住 Array.sort() 中比较函数的工作原理。
我认为问题在于所有的示例都使用了这种简写语法。
array.sort((a, b) => b - a); // 对James来说太难了
这对我来说太令人困惑了。过去,我会尝试 b - a
然后尝试 a - b
,然后选择给我想要的结果的那个。但现在我有一个足够简单的思维模型,让我能够记住。
首先,比较函数的唯一目的就是要回答这个问题:
“a” 在新排序的数组中应该放在哪里?是在 “b” 的左边还是右边?
传递给比较函数的参数通常命名为 a
和 b
。这对我来说是有意义的,因为第一个参数在第二个参数之前,而且 a
在英文字母表中排在 b
前面。这些参数代表数组中的两个项目。
现在让我们考虑返回值。该函数必须返回一个数字。数字存在于从左到右的数轴上,就像数组中的项目一样。负数在左边,零在中间,正数在右边。
-3 -2 -1 0 1 2 3
----------------------------
一个好的老式数轴
所以,如果你的比较函数返回一个 负数,第一个参数 a
会先出现,在 b
之前。就像数轴上的负数先出现一样!
如果函数返回一个 正数,第一个参数 a
会在 b
之后出现。项目 a
将位于 b
的“右边”,就像数轴上的正数位于“右边”一样!
🤯
如果函数返回0,现有元素的顺序将不会有任何变化。这个很容易记住。
总结一下,我们只是想要找出 a
应该去哪里。它是在 b
的左边还是右边。负数意味着左边,正数意味着右边。数轴。从左到右。
数轴的“从左到右”,数组中的项目,字母表,以及位置参数,今天对我来说终于清晰了。
也许这对你也有帮助,你可以理解这一点,并且可以节省自己13年的时间,不用再去谷歌搜索“Array.sort(comparator) 是怎么工作的?”。