每次用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...