1. 程式人生 > >高階函數sort

高階函數sort

末尾 size 把他 cas cti clas 高階函數 else lib

  排序中我們經常會用sort這個高階函數,我們今天就來講講這個sort的比較機制,對於數字來說我們只需要比較他們的大小就可以了

但是

    var arr =[15,81,9,4,3];
    alert(arr.sort()); // 最後的結果是 15 3 4 81 9

結果和我們想的不太一樣,說明這個函數的內部不僅僅是比較數字大小那麽簡單

在看一個

var arr =[‘Apple‘,‘software‘,‘Tencent‘,‘alibaba‘];
alert(arr.sort()); //最後的結果是 Apple Tencent alibaba software 

同樣是a開頭但是結果一個在前,一個在後

或許你已經知道了,但是為了說明問題我們在看一個

var arr =[‘Apple‘,‘software‘,‘Tencent‘,‘123‘,‘89‘];
alert(arr.sort());//123 89 Apple software Tencent

最後一句話,其實是 因為字符串根據ASCII碼進行排序,而小寫字母a的ASCII碼在大寫字母之後,對於數字呢 先把他轉化為String類型 比較1 的ASCII碼小於8,所以123 “小於” 89

現在我們來重寫sort方法

var arr =[22,9,59,123,89];
 arr.sort(
        function (x,y){
            
if(x>y) return 1; else if(y<x) return -1; else{ return 0; } }); alert(arr); //9 22 59 89 123

對於數字,我們直接對它們比較

var arr =[‘Apple‘,‘software‘,‘Tencent‘,‘alibaba‘];
arr.sort(
        function (x,y){
            s1 
= x.toUpperCase(); s2 = y.toUpperCase(); if(s1>s2) return 1; else if(s1<s2) return -1; else return 0; }); alert(arr); // alibaba Apple software Tencent alert(‘abb‘<‘abc‘); //true

對於字符串忽略他們大小寫進行比較,對字符首字母的ASII碼進行比較,如果首字母相同,比較第二個,一直到該字符串末尾

高階函數sort