詳解js sort 排序

2021-08-14 23:36:48 字數 2900 閱讀 2360

sort() 排序在實際專案中是經常用到的。剛專案中遇到比較複雜資料的排序,寫點東西,記一下心得。

1. sort() 預設是按照 unicode 碼順序公升序排列,會修改原陣列,也會返回乙個新陣列。

2. 可以在 sort() 方法裡傳入比較器函式自定義比較規則。

[3,2,1].sort((a,b) => )
examples:

1. 純數字陣列,純數字字串陣列或組合陣列排序

const arr = [9,43,22,100];  //或 ['9','43','22','100']

let newarr = arr.sort();

console.log(newarr) //[100, 22, 43, 9]

純數字陣列,純數字字串陣列或組合不傳比較器直接用 sort() 排序,是按照元素的第一位的大小進行排序的,並不是我們想要的結果。

如果想要按數字大小排列就得傳入比較器函式。

const arr = [91,42,61,22];

let newarr = arr.sort((a,b) => );

console.log(newarr)

2. 由字母和數字字串組成的陣列排序

字串排序,sort() 會先對字串的第一位的 unicode 碼進行對比,如果一樣依次比較第二位,第三位...

公升序直接使用 sort() 方法就行

const arr = ["a","d","fa","5","t","fw2","a31","b","e","2fs","4","0",'z9z','z6n','ng','af','7a']

let newarr = arr.sort();

console.log(newarr)

傳入比較器函式可以按降序排列

const arr = ["a","d","fa","5","t","fw2","b","e","2fs","4",'z9z','z6n','af','7a'];

let newarr = arr.sort((a,b) =>

if (a > b)

return 0;

});console.log(newarr) //["2fs", "4", "5", "7a", "a", "af", "b", "d", "e", "fa", "fw2", "t", "z6n", "z9z"]

字串比大小 < >,是按照字串的 unicode 碼大小進行比較的。

這是網上找的乙個例子,把數字的排序放到字母後面

function mysorter(a, b)

const pyarray=["a","d","fa","5","t","fw2","a31","b","e","2fs","4","0"]

console.log((pyarray.sort(mysorter)))

3. 漢語按照拼音首字母排序

a.localecompare(b [, locales [, options]]) 方法會按照當地的規則,採用底層作業系統提供的排序規則進行比較。返回乙個數字,a 在 b 之前返回負數,a 在 b 之後返回正數,相等返回0。可以用此方法給漢語排序。

相容 ie11。

const arr = ['中國','紅火','大爺','大大','阿里'];

let newarr = arr.sort((a,b) => );

});console.log(newarr) //["阿里", "大大", "大爺", "紅火", "中國"]

4. 數字字串、字母、漢語和標點混合字串陣列排序

這裡的字串是包含標點,數字字串,大小寫字母,漢字混合型別的字串。

const rooms = [,,

,,,,

,,,,

,,,,

,,

,];rooms.sort(locale);

console.log(rooms);

function locale(a, b) );

}

這種方法排出的預設順序是:符號,數字0-9,漢字,小寫在前大寫在後字母aa-zz。

自定義的排序順序:空字串,數字,大寫,小寫,漢字,標點及特殊字元。

(感覺應該還有很多可以優化的地方):

//空-1,數字字母1,漢字2,符號3

const standard = /[a-za-z0-9]/; //1

const hanzi = /[\u4e00-\u9fa5]/; //2

const rooms = [,,

,,,,

,,,,

,,,,

,,,,

];rooms.sort(sortfunc);

console.log(rooms);

function sortfunc(a, b)

for(let i=0; itype(b[i])) else if(type(a[i]) === type(b[i]))else if(a[i] < b[i])

}else if(type(a[i]) === 2) )}}

}else

}}//判斷當前位的字串的型別

function type (str) else if(standard.test(str)) else if(hanzi.test(str)) else

return n;

}

陣列長度 <= 22 時,採用插入排序;> 22 時,採用快速排序。

js sort 排序方法

如果我們想要給任何包含簡單值的陣列排序,必須要做更多的工作 var m aa bb a 4,8,15,16,23,42 m.sort function a,b if typeof a typeof b return typeof a typeof b 1 1 如果有乙個更智慧型的比較函式,我們可以使...

JS sort 方法實現物件陣列的排序

sort 方法會改變原陣列,預設按unicode碼順序排列 我們通常遇到的都是陣列排序,對於物件陣列當然也是可以的,方法如下 可以選擇它的某一屬性進行比較 var arr function compare p arr.sort compare age console.log arr 結果如下 不使用...

js sort函式遇到的坑

最近做專案用sort 對陣列排序,發現排完後的順序不對,搜了很多帖子,才明白了。var values 0,1,5,10,15 values.sort alert values 0,1,10,15,5 顯然不是你想要的 為啥5在最後面呢?sort函式在比較時 會呼叫每個陣列項的tostring 轉型方...