原理
JS中的sort()方法用于对数组进行排序,并返回数组。
默认情况下按升序排列数组,但是是根据字符串UniCode码进行比较。sort()方法进行排序时会在每一项上调用String()转型函数,然后通过字符串UniCode码来决定顺序,即使数组的元素都是number类型,也会把它转换成字符串再比较。
为此,sort()方法可以接受一个参数,此参数为函数,从而达到我们想要的比较效果。
使用
没有传入参数时:
var arr = [2,15,8,11,7,4]; console.log(arr.sort()); //11 15 2 4 7 8
显而易见,这不是我们想要的效果,但是我们可以在sort()方法里面传入一个比较函数来达到我们想要的效果:
/** * 比较函数:接收两个参数 * @param val1 * @param val2 * @returns {number} */ function compare(val1,val2){ if (val1 < val2){ return -1; }else if(val1 > val2){ return 1; }else { return 0; } } var arr = [2,15,8,11,7,4]; console.log(arr.sort(compare)); //2 4 7 8 11 15
可以把返回值1和-1换一下位置达到降序。此外,这个比较函数还可以简写成箭头函数:
var arr = [2,15,8,11,7,4]; arr.sort((a,b) => a < b ? 1:a > b ? -1:0) console.log(arr); //15 11 8 7 4 2