试图从我知道的数组中获得最高和最低值只包含整数似乎比我想象的要难.
var numArray = [140000, 104, 99];
numArray = numArray.sort();
alert(numArray)Run Code Online (Sandbox Code Playgroud)
我希望这能表明99, 104, 140000.相反它显示104, 140000, 99.所以似乎排序是将值作为字符串处理.
有没有办法让sort函数实际对整数值进行排序?
我最近阅读了很多关于JavaScript排序的答案,我经常偶然发现一个比较函数,如下所示:
array.sort(function(a,b){ a > b ? 1 : -1; });
Run Code Online (Sandbox Code Playgroud)
所以它是一个比较函数,如果a大于则返回1,如果小于OR EQUAL TO b则返回-1 .如MDN(链接)所述,比较函数也可以返回零,以确保两个项目的相对位置保持不变:ab
如果compareFunction(a,b)返回0,则保持a和b相对于彼此保持不变,但是对于所有不同的元素进行排序.
所以官方的例子看起来更像是这样的:
function compare(a, b) {
if (a < b) return -1;
if (a > b) return 1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
实际上,通过添加return 0语句,排序算法通常需要更少的迭代并且总计运行得更快(JSPerf).
所以我想知道在省略return 0声明方面是否有任何优势.
我意识到在MDN上,它还说:
注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点.
指的是行为,这a和b如果返回0应保持不变.那么也许,通过返回0,我们在不同的浏览器中得到一个稍微不同的排序数组?这可能是个原因吗?是否有任何其他充分理由不返回零?