在JavaScript中排序主要用到的api就是sort了,但是使用sort有幾個(gè)坑需要注意,讓我們一起來(lái)看看
排序原理-不使用參數(shù)時(shí)
sort() 方法用于對(duì)數(shù)組的元素進(jìn)行排序。排序順序可以是字母或數(shù)字,并按升序或降序。
默認(rèn)排序順序?yàn)榘醋值渖颉?/p>
在不使用參數(shù)時(shí),sort使用的是字典排序
如果數(shù)組中元素都是字符串,這點(diǎn)很好理解,比如:
var arr= new Array(); //創(chuàng)建一個(gè)空數(shù)組
arr= ['sun','xu','ma','he','wang','zhang'];
arr.sort(); //調(diào)用sort方法
輸出結(jié)果為:
he
ma
sun
wang
xu
zhang
但是如果是數(shù)字呢?讓我們來(lái)看看:
var a = new Array();
a = [1,10,100,5,25,99];
a.sort();
輸出結(jié)果為:
1
10
100
25
5
99
令人費(fèi)解。。。但其實(shí)如果知道其原理就很容易理解,sort默認(rèn)是按照字典順序排序的;
字典序
字典序(dictionary order),又稱 字母序(alphabetical order),原意是表示英文單詞在字典中的先后順序,在計(jì)算機(jī)領(lǐng)域中擴(kuò)展成兩個(gè)任意字符串的大小關(guān)系。
英文中的 字母表(Alphabet) 按照如下的順序排列:
ABCDEFG HIJKLMN OPQRST UVWXYZ
abcdefg hijklmn opqrst uvwxyz
在字典中,單詞是按照首字母在字母表中的順序進(jìn)行排列的,比如 alpha 在 beta 之前。而第一個(gè)字母相同時(shí),會(huì)去比較兩個(gè)單詞的第二個(gè)字母在字母表中的順序,比如 account 在 advanced 之前,以此類推。下列單詞就是按照字典序進(jìn)行排列的:
as
aster
astrolabe
astronomy
at
ataman
attack
baa
在計(jì)算機(jī)領(lǐng)域中,這個(gè)字典序就不僅僅用來(lái)比較英文單詞了,而是比較任意字符串。對(duì)于兩個(gè)字符串,大小關(guān)系取決于兩個(gè)字符串從左到右第一個(gè)不同字符的 ASCII 值的大小關(guān)系。比如ah1x小于ahb,Z5小于a3,10小于101等
排序原理-使用參數(shù)
在大多數(shù)情況下,我們需要將數(shù)組中的數(shù)字按大小排序,就必須使用一個(gè)函數(shù)
使用數(shù)字排序,你必須通過一個(gè)函數(shù)作為參數(shù)來(lái)調(diào)用;函數(shù)指定數(shù)字是按照升序還是降序排列。
// 數(shù)組排序 sort
let arr=[1,8,2,6,9,12,64,86,3,5,4,9,4]
console.log('-------------------------這是升序--------------------');
console.log(arr.sort(sort_s));
console.log('-------------------------這是降序--------------------');
console.log(arr.sort(sort_j));
// 升序
function sort_s(a,b){return a-b;
}
// 降序
function sort_j(a,b){return b-a;
}
輸出結(jié)果為:

注意事項(xiàng)
這種方法會(huì)改變?cè)紨?shù)組! 這種方法會(huì)改變?cè)紨?shù)組!這種方法會(huì)改變?cè)紨?shù)組!重要的事情說(shuō)三遍,排完后會(huì)直接影響原數(shù)組,并且元素不會(huì)進(jìn)行復(fù)制,也就是說(shuō),sort()的返回值為原數(shù)組的引用,例如:
let arr=new Array()
arr=[2,4,1,8,5,3]
let arrt=arr.sort((a,b)=>a-b)
console.log(arr===arrt)//true
最后
最近找到一個(gè)VUE的文檔,它將VUE的各個(gè)知識(shí)點(diǎn)進(jìn)行了總結(jié),整理成了《Vue 開發(fā)必須知道的36個(gè)技巧》。內(nèi)容比較詳實(shí),對(duì)各個(gè)知識(shí)點(diǎn)的講解也十分到位。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-439080.html
有需要的小伙伴,可以點(diǎn)擊下方卡片領(lǐng)取,無(wú)償分享文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-439080.html
到了這里,關(guān)于原生JS之sort排序方法詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!