sort() 排序在實際專案中是經常用到的。剛專案中遇到比較複雜資料的排序,寫點東西,記一下心得。
1. sort() 預設是按照 unicode 碼順序公升序排列,會修改原陣列,也會返回乙個新陣列。
2. 可以在 sort() 方法裡傳入比較器函式自定義比較規則。
[3,2,1].sort((a,b) => )
examples:
1. 純數字陣列,純數字字串陣列或組合陣列排序
純數字陣列,純數字字串陣列或組合不傳比較器直接用 sort() 排序,是按照元素的第一位的大小進行排序的,並不是我們想要的結果。const arr = [9,43,22,100]; //或 ['9','43','22','100']
let newarr = arr.sort();
console.log(newarr) //[100, 22, 43, 9]
如果想要按數字大小排列就得傳入比較器函式。
2. 由字母和數字字串組成的陣列排序const arr = [91,42,61,22];
let newarr = arr.sort((a,b) => );
console.log(newarr)
字串排序,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)
字串比大小 < >,是按照字串的 unicode 碼大小進行比較的。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"]
這是網上找的乙個例子,把數字的排序放到字母後面
3. 漢語按照拼音首字母排序function mysorter(a, b)
const pyarray=["a","d","fa","5","t","fw2","a31","b","e","2fs","4","0"]
console.log((pyarray.sort(mysorter)))
a.localecompare(b [, locales [, options]]) 方法會按照當地的規則,採用底層作業系統提供的排序規則進行比較。返回乙個數字,a 在 b 之前返回負數,a 在 b 之後返回正數,相等返回0。可以用此方法給漢語排序。
相容 ie11。
4. 數字字串、字母、漢語和標點混合字串陣列排序const arr = ['中國','紅火','大爺','大大','阿里'];
let newarr = arr.sort((a,b) => );
});console.log(newarr) //["阿里", "大大", "大爺", "紅火", "中國"]
這裡的字串是包含標點,數字字串,大小寫字母,漢字混合型別的字串。
這種方法排出的預設順序是:符號,數字0-9,漢字,小寫在前大寫在後字母aa-zz。const rooms = [,,
,,,,
,,,,
,,,,
,,
,];rooms.sort(locale);
console.log(rooms);
function locale(a, b) );
}
自定義的排序順序:空字串,數字,大寫,小寫,漢字,標點及特殊字元。
(感覺應該還有很多可以優化的地方):
陣列長度 <= 22 時,採用插入排序;> 22 時,採用快速排序。//空-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;
}
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 轉型方...