我最近阅读了很多关于 JavaScript 排序的答案,我经常偶然发现一个看起来像这样的比较函数:
array.sort(function(a,b){ a > b ? 1 : -1; });
所以它是一个比较函数,如果a
大于则返回 1,如果小于 OR EQUAL TOb
则返回-1 。如 MDN ( link ) 所述,比较函数也可以返回零,以确保两个项目的相对位置保持不变:a
b
如果 compareFunction(a, b) 返回 0,则 a 和 b 彼此保持不变,但相对于所有不同元素进行排序。
所以官方的例子看起来更像这样:
function compare(a, b) {
if (a < b) return -1;
if (a > b) return 1;
return 0;
}
事实上,通过添加一个return 0
语句,排序算法通常需要更少的迭代并且总体上运行得更快(JSPerf)。
所以我想知道省略return 0
声明是否有任何优势。
我意识到在 MDN 上,它还说:
注意:ECMAscript 标准不保证这种行为,因此并非所有浏览器(例如至少可以追溯到 2003 年的 Mozilla 版本)都尊重这一点。
指的是行为,这a
和b
如果返回0应保持不变。那么也许,通过返回 0,我们在不同的浏览器中得到一个稍微不同的排序数组?这可能是一个原因吗?还有什么其他好的理由根本不返回零吗?