首先要理解sort()内部是利用递归进行冒泡排序的
例如:
var arr = [3, 8, 5, 1];
sort()方法的比较逻辑为:
第一轮:3和8比,3和5比,3和1比
第二轮:8和5比,8和1比
第三轮:5和1比
其次,sort()方法会接受一个比较函数compare(a, b),该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。
最后,永远要记住一句话,凡是返回大于0的正数的时候就要交换位置。(内部实现)
例如:
var arr =[3, 8, 5, 1];
现在要进行升序排列,从左到右的数组项关系最终应该为: a < b < c < d
所以只要在当a大于b的时候去交换它们的位置就好了:
if(a > b ) { return 1; }
简化后:
// 升序 return a - b; // 倒序 return b - a;
另外需要注意的是sort()方法比较的是字符串,没有按照数值的大小对数字进行排序,要实现这一点,就必须使用上面所提到的排序函数
function compare(a,b){
return a - b
}
arr =[3, 8, 5, 1]; console.log(arr.sort()); // [3,8,5,1]
console.log(arr.sort(compare)); //[1,3,5,8]
原文:https://www.cnblogs.com/yukui-mamba/p/14866336.html