數(shù)組排序函數(shù)衅枫,經(jīng)常使用。(抱歉朗伶,我沒(méi)用過(guò)弦撩,如果你不問(wèn),我是想不到排序用這個(gè)函數(shù)的 论皆。工作中用到數(shù)組排序函數(shù)時(shí)益楼,都是用封裝好的排序函數(shù))
不過(guò)。点晴。為啥會(huì)想到這個(gè)函數(shù)感凤,是因?yàn)槿豪镆粋€(gè)人的面試題是對(duì)一個(gè)數(shù)組進(jìn)行隨機(jī)排序
實(shí)現(xiàn)方法:
aa.sort(()=>0.5-Math.random())
// 解釋: Math.random()生成0~1 的數(shù), 0.5- 生成的這個(gè)數(shù)粒督,只會(huì)有三種情況 (>0 , =0 , <0) 完成了隨機(jī)排序功能
一句話說(shuō)明
- Sort會(huì)修改原數(shù)組陪竿,謹(jǐn)慎使用
- 實(shí)參是一個(gè)函數(shù),函數(shù)的返回值為一個(gè)數(shù)字坠陈,負(fù)數(shù)向前排;相等則不動(dòng)捐康;大于向后排仇矾。
使用語(yǔ)法
arr.sort([compareFunction])
參數(shù):
如果沒(méi)有 compareFunction 參數(shù),會(huì)將元素轉(zhuǎn)為字符串去逐位比較 (9 在 80 之前),從小到大
- compareFunction 可選
用來(lái)指定按某種順序進(jìn)行排列的函數(shù)解总。如果省略贮匕,元素按照轉(zhuǎn)換為的字符串的各個(gè)字符的Unicode位點(diǎn)進(jìn)行排序。- firstEl
第一個(gè)用于比較的元素花枫。 - secondEl
第二個(gè)用于比較的元素
- firstEl
aa.sort((a,b)=>a-b) // 從小到大
返回值
一個(gè)數(shù)組刻盐,并且對(duì)原數(shù)組也執(zhí)行了相應(yīng)操作
v8 引擎代碼
剛巧,這個(gè)函數(shù)的 v8的代碼我看過(guò)一點(diǎn)劳翰,所以這里也就列出來(lái)了
github/v8/v8
從這個(gè)文件的第 712 行可以看到 For short (length <= 22) arrays, insertion sort is used for efficiency.
敦锌,也就是說(shuō),如果數(shù)組數(shù)量 小于23個(gè)佳簸,采用 插入排序的方式 如果 大于22個(gè)乙墙,會(huì)采用快速排序方式