js排序方法sort()之理解

sort()方法

  • sort()會(huì)按照升序重新排列數(shù)組元素,即最小的值在前面,最大的值在后面

  • 為此,sort()會(huì)在每一項(xiàng)上調(diào)用String()轉(zhuǎn)型函數(shù),然后比較字符串來決定順序。

  • 即使數(shù)組的元素都是數(shù)值,也會(huì)先把數(shù)組轉(zhuǎn)換為字符串再比較、排序。

let values = [0,1,5,10,15]
values.sort();
console.log(values);//0,1,10,15,5

為了更好的解決排序問題,sort()方法可以接收一個(gè)比較函數(shù)。

比較函數(shù)接收兩個(gè)參數(shù):

  • 如果第一個(gè)參數(shù)應(yīng)該排在第二個(gè)參數(shù)前面,就返回負(fù)值;
  • 如果兩個(gè)參數(shù)相等,就返回0;
  • 如果第一個(gè)參數(shù)應(yīng)該排在第二個(gè)參數(shù)后面,就返回正值。
//升序,把返回值改下就能實(shí)現(xiàn)降序
function compare(value1,value2){
    //第一個(gè)形參value1代表的實(shí)參始終在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方法第一個(gè)參數(shù)是函數(shù),其實(shí)是一個(gè)回調(diào)函數(shù),回調(diào)函數(shù)有兩個(gè)參數(shù)

第一個(gè)形參數(shù)所代表的實(shí)參始終在第二個(gè)形參代表的實(shí)參的后面

所以應(yīng)該這樣理解,value1 < value2比較的就是目標(biāo)數(shù)組中后一個(gè)數(shù)是否比前一個(gè)數(shù)小,如果判定為false,那么return -1,(value1 > value2的判定為true,return 1;其他情況return 0)就能實(shí)現(xiàn)目標(biāo)數(shù)組升序;如果判定為true,那么return 1就能實(shí)現(xiàn)目標(biāo)數(shù)組的降序。

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高級(jí)程序設(shè)計(jì)第四版》
菜鳥教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容