JS?數(shù)組sort方法的升序?yàn)槭裁词莂-b你知道嗎
簡(jiǎn)單使用 sort 方法的時(shí)候,是按位排序的,比如:
var arr = [1, 22, 15, 32, 4, 5] arr.sort()//[1,15,22,32,4,5]
這樣的結(jié)果很明顯不能滿足大多數(shù)問題的需求,所以我們可以在調(diào)用sort方法的時(shí)候,傳入一個(gè)回調(diào)函數(shù),從而改變 sort 方法的排序方式。先放結(jié)果,下列兩次排序分別為 升序排序 和 降序排序 。
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]
回調(diào)函數(shù)的格式為(a,b)=> { return xxx },ab為數(shù)組中任意兩個(gè)數(shù)
當(dāng)返回值大于0時(shí),a放在b的后面;
當(dāng)返回值小于0時(shí),a放在b的前面;
當(dāng)返回值等于0時(shí),ab位置不改變。
所以,為什么上面返回 a - b 就是升序,返回 b - a 就是降序了呢?
我們可以簡(jiǎn)單舉個(gè)例子,類似于高中數(shù)學(xué)的分類討論。
當(dāng) a>b 時(shí),
a - b > 0 ,排序結(jié)果 ===> b,a (升序)
b - a < 0 ,排序結(jié)果 ===> a,b (降序)
當(dāng) b>a 時(shí),
a - b < 0 ,排序結(jié)果 ===> a,b (升序)
b - a > 0 ,排序結(jié)果 ===> b,a (降序)
當(dāng) a=b 時(shí),
a - b = b - a =0 , 排序結(jié)果 ===> 保持不變
由此看出,
無論a>b還是b>a,return a-b 總能得到升序的結(jié)果,而 return b-a 總能得到降序的結(jié)果。
另外,return a-b / return b - a 只是一種在理解的基礎(chǔ)上簡(jiǎn)便的寫法。
如果你還是不能理解,完全可以像這樣寫,下面也是一個(gè)升序排序:
因?yàn)榉祷刂?gt;0,把a(bǔ)放在后面,所以a>b時(shí)候,返回一個(gè)正數(shù)。后面理解同理。
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]
相關(guān)文章
JavaScript String 對(duì)象常用方法詳解
下面小編就為大家?guī)硪黄狫avaScript String 對(duì)象常用方法詳解。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05JS排序方法(sort,bubble,select,insert)代碼匯總
新技術(shù)一直在不斷變化,掌握一些基礎(chǔ)是未來學(xué)習(xí)不斷更新的技術(shù)的堅(jiān)實(shí)基礎(chǔ)。近來閑來無事,為了溫習(xí)一下從前學(xué)的數(shù)據(jù)結(jié)構(gòu),將數(shù)據(jù)結(jié)構(gòu)中的排序算法用JS實(shí)現(xiàn)了一遍,2016-01-01uni-app自定義組件components導(dǎo)入失敗或頁面不顯示文本等解決方法
這篇文章主要給大家介紹了關(guān)于uni-app自定義組件components導(dǎo)入失敗或頁面不顯示文本等的解決方法,眾所周知Uni-app支持使用自定義組件,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08