JS 數組sort方法的升序為什麼是a-b你知道嗎
簡單使用 sort 方法的時候,是按位排序的,比如:
var arr = [1, 22, 15, 32, 4, 5] arr.sort()//[1,15,22,32,4,5]
這樣的結果很明顯不能滿足大多數問題的需求,所以我們可以在調用sort方法的時候,傳入一個回調函數,從而改變 sort 方法的排序方式。先放結果,下列兩次排序分別為 升序排序 和 降序排序 。
var arr = [1, 22, 15, 32, 4, 5] arr.sort((a, b) => {return a - b}) // 升序排序 [1, 4, 5, 15, 22, 32] arr.sort((a, b) => {return b - a}) // 降序排序 [32, 22, 15, 5, 4, 1]
回調函數的格式為(a,b)=> { return xxx },ab為數組中任意兩個數
當返回值大於0時,a放在b的後面;
當返回值小於0時,a放在b的前面;
當返回值等於0時,ab位置不改變。
所以,為什麼上面返回 a – b 就是升序,返回 b – a 就是降序瞭呢?
我們可以簡單舉個例子,類似於高中數學的分類討論。
當 a>b 時,
a – b > 0 ,排序結果 ===> b,a (升序)
b – a < 0 ,排序結果 ===> a,b (降序)
當 b>a 時,
a – b < 0 ,排序結果 ===> a,b (升序)
b – a > 0 ,排序結果 ===> b,a (降序)
當 a=b 時,
a – b = b – a =0 , 排序結果 ===> 保持不變
由此看出,
無論a>b還是b>a,return a-b 總能得到升序的結果,而 return b-a 總能得到降序的結果。
另外,return a-b / return b – a 隻是一種在理解的基礎上簡便的寫法。
如果你還是不能理解,完全可以像這樣寫,下面也是一個升序排序:
因為返回值>0,把a放在後面,所以a>b時候,返回一個正數。後面理解同理。
var arr = [1, 22, 15, 32, 4, 5] arr.sort((a, b) => { if (a > b) return 1; else if (a < b) return -1; else return 0; }); // [1,4,5,15,22,32]
推薦閱讀:
- Python列表排序 list.sort方法和內置函數sorted用法
- golang編程開發使用sort排序示例詳解
- Go語言sort包函數使用示例
- python中sort()函數用法詳解
- Python list sort方法的具體使用