js排序方法sort()之理解

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高级程序设计第四版》
菜鸟教程

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容