sort()方法
sort()
会按照升序重新排列数组元素,即最小的值在前面,最大的值在后面为此,
sort()
会在每一项上调用String()
转型函数,然后比较字符串来决定顺序。即使数组的元素都是数值,也会先把数组转换为字符串再比较、排序。
let values = [0,1,5,10,15]
values.sort();
console.log(values);//0,1,10,15,5
为了更好的解决排序问题,sort()
方法可以接收一个比较函数。
比较函数接收两个参数:
- 如果第一个参数应该排在第二个参数前面,就返回负值;
- 如果两个参数相等,就返回0;
- 如果第一个参数应该排在第二个参数后面,就返回正值。
//升序,把返回值改下就能实现降序
function compare(value1,value2){
//第一个形参value1代表的实参始终在value2所代表的后面
console.log(value1)//1,5,10,15
console.log(value2)//0,1,5,10
if(value1 < value2){
return -1
}else if(value1 > value2){
return 1;
}else{
return 0
}
}
let values = [0,1,5,10,15]
values.sort(compare);
console.log(values);//0,1,5,10,15
#OR
values.sort((a,b) => a < b ? 1 : a > b ? -1 : 0)
console.log(values)://15,10,5,1,0
#OR
function compare(value1,value2){
//升序
return value1 - value2
//降序
// return value2 - value1
}
let values = [0,1,5,10,15]
console.log(values.sort(compare))//[0,1,5,10,15]
我的理解
sort方法第一个参数是函数,其实是一个回调函数,回调函数有两个参数:
第一个形参数所代表的实参始终在第二个形参代表的实参的后面
所以应该这样理解,value1
< value2
比较的就是目标数组中后一个数是否比前一个数小,如果判定为false,那么return -1,(value1 > value2的判定为true,return 1;其他情况return 0)就能实现目标数组升序;如果判定为true,那么return 1就能实现目标数组的降序。
function compare(value1,value2){
console.log(value1)//2,4,3,9,6
console.log(value2)//1,2,4,3,9
if(value1 < value2){
//升序
return -1;
#OR
//降序
return 1;
}else if(value1 > value2){
//升序
return 1;
#OR
//降序
return -1;
}else{
return 0
}
}
let data = [
1,2,4,3,9,6
];
data.sort(compare);
参考资料:
《javaScript高级程序设计第四版》
菜鸟教程