陣列的常用方法(3)--es3.0:sort
阿新 • • 發佈:2018-11-12
Sort:
排序
現在是升序,我想降序怎麼辦呢?
,reverse吧,這不就完事了。
那現在看個例子:
var arr = [1,3,5,4,10];//拍完順序之後應該是1,3,4,5,10
但是你看 ,怎麼回事?
他被你這個當成了字元,按ASCII排的,不是咱們想要的。
Sort遵守一個規則:
1.必須寫兩個形參
2.看返回值
(1)如果返回值為正數時,後面的數在前面
(2)如果返回值為負數時,前面的數在前面
(3)如果返回值為0時,不動
var arr = [1,3,5,4,10]; arr.sort(function(){ return ; })
返回值如果是1,為正數,那麼1和3換位置,再比較1,5,它符合氣泡排序的規則。
返回值如果是-1,為負數,1還是在前面,再比較1,5;1,4.。。。
所以返回值就是我們所控制的。
var arr = [1,3,5,4,10];
arr.sort(function(a,b){
if(a > b){
return 1;
}else{
return -1;
}
})
那還有沒有更簡單的方法,也就是說,你把他簡化一下。
三目運算子可以吧!arr.sort(function(a,b){
a > b ? 1 : -1;
})
還能不呢個簡化一下?
你看,a>b返回一個正數,說明這是升序吧,a>b也就是a-b>0,
var arr = [1,3,5,4,10];
arr.sort(function(a,b){
if(a - b > 0){
return 1;
}else{
return -1;
}
})
a>b,else就是a-b<0吧。所以,a-b>0的時候返回一個正數,那我返回a-b的結果不就完事了,else,a-b<0的時候返回一個負數,那我也返回a-b的結果不也就完事了,都是返回a-b的結果。
var arr = [1,3,5,4,10];
arr.sort(function(a,b){
return a - b;
})
那降序就是返回b-a了唄。
看結果的時候你可別arr.sort,這個函式已經執行完了,所以你不能直接呼叫,你得裡面加函式才能呼叫,你要如果呼叫arr.sort(),他會比較ASCII的大小。
對吧!