高階函數sort
阿新 • • 發佈:2017-09-22
末尾 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