理解js陣列的sort函式排序

2021-10-09 20:08:21 字數 966 閱讀 3084

每次用js的sort函式排序都容易犯錯誤,當時搞懂了一段時間就又忘了。 現在來把它摟一摟。 

sort函式的用法: 

arr = [3,2,1]; 

arr.sort((a,b)=>{

其實這個函式確實設計得有點奇怪,他讓你傳入乙個自己的函式來確實排序演算法,所以關鍵是自己怎麼來寫這個比較函式,

關於這個返回值 我很容易就想到 true/false 來表示 換不換位置。 

易犯錯點一: 

錯誤把返回值寫成 true/false

實際的返回值應該是數值。 

易犯錯點二: 總是容易搞混這個第一引數,第二引數到底代表啥,總認為他傳入是按順序來的 a = arr[0],b = arr[1] 這樣依次類推,

實際上是 a =arr [1],b = arr[0] ....  依次類推。 

還要就是關於他的實現原理: 有人說實現是用冒泡來實現的,也有人說不是,當然用冒泡之類的排序肯定可以實現,但是實際上不是,加列印看下就行,比如:

arr = [3,2,1]; 

arr.sort((a,b)=>{

console.log("a = " + a + " b = " + b); 

if(b>a){

return -1;         //相當於從小到大排列

return 1; 

從列印可以看出是 3 和 2 比,2和1比,只比再次,而冒泡就要比3次了。 關於他的實現原理我感覺更像是插值法,每個元素都找好自己的位置插進去,最後就是想要的排序了。 

有時候用起來感覺複雜和容易犯錯,其實是思維定性導致的,比如返回true/false。 

最後的總結:

寫sort的比較函式其實很簡單

(a,b)=>{

實際只要想明白 a = arr[1] , b = arr[0] , 然後這兩個數應該怎麼排, 如果是想交換位置變成 arr[1]arr[0] 這樣排就返回 -1,其他的啥都不用管,就是這樣簡單。 

js 陣列排序函式sort

arrayobj.sort sortfunction 引數 sortfunction 可選項。是用來確定元素順序的函式的名稱。如果這個引數被省略,那麼元素將按照 ascii 字元順序進行公升序排列。sort 方法將 array 物件進行適當的排序 在執行過程中並不會建立新的 array 物件。如果為...

Js陣列排序函式sort

js實現多維陣列和物件陣列排序,用的其實就是原生sort 函式,語法為 arrayobject.sort sortby sortby 可選。規定排序順序。必須是函式。返回值為對陣列的引用 請注意,陣列在原陣列上進行排序,不生成副本。如果呼叫該方法時沒有使用引數,將按字母順序對陣列中的元素進行排序,說...

Js 陣列排序函式sort

最近看到乙個js函式sort 覺得挺有意思,寫在這裡與大家分享。如果有什麼地方不對或者有更好的寫法,也請大家不吝賜教。sort 返回乙個元素已經進行了排序的 array 物件。1.按字母排序 直接使用sort 函式,預設按字母順序排。var arr new array dd aa bb cc arr...