面試題之(sort排序)
面試主要問題是有無(wú)參數(shù)時(shí)候的區(qū)區(qū)別。
1
如果省略參數(shù),元素按照轉(zhuǎn)換為的字符串的各個(gè)字符的Unicode位點(diǎn)進(jìn)行排序。
let arr = ['General','Tom','Bob','John','Army'];let resArr = arr.sort();console.log(resArr);//輸出 ["Army", "Bob", "General", "John", "Tom"]let arr2 = [30,10,111,35,1899,50,45];let resArr2 = arr2.sort();console.log(resArr2);//輸出 [10, 111, 1899, 30, 35, 45, 50]
2
傳入?yún)?shù),實(shí)現(xiàn)升序,降序;
let arr3 = [30,10,111,35,1899,50,45];arr3.sort(function(a,b){? return a - b;})console.log(arr3);//輸出 ?[10, 30, 35, 45, 50, 111, 1899]? ?let arr4 = [30,10,111,35,1899,50,45];arr4.sort(function(a,b){? return b - a;})console.log(arr4);//輸出 [1899, 111, 50, 45, 35, 30, 10]
3
當(dāng)json對(duì)象時(shí)候使用對(duì)象某屬性即可
let arr5 = [{id:10},{id:5},{id:6},{id:9},{id:2},{id:3}];arr5.sort(function(a,b){? ?return a.id - b.id})console.log(arr5);? ?//輸出新的排序? ?// ? ?{id: 2}? ?// ? ?{id: 3}? ?// ? ?{id: 5}? ?// ? ?{id: 6}? ?// ? ?{id: 9}? ?// ? ?{id: 10}
值得一提的是,sort排序的算法使用了兩種,如果是小于10的,直接采用插入排序,穩(wěn)定性較高,時(shí)間復(fù)雜度也不高。如果大于10,則采用快速排序,找到基準(zhǔn),左右判斷,不斷遞歸判斷排序。
總結(jié)
至于為什么會(huì)是按unicode編碼排序,主要是因?yàn)樵创a里面它會(huì)自動(dòng)判斷,如果沒有沒有傳入函數(shù)參數(shù),它會(huì)把它轉(zhuǎn)為字符串進(jìn)而按unicode編碼排序。也有的伙伴會(huì)說(shuō)是按ascll碼排序,主要是因?yàn)閡nicode碼屬于全世界統(tǒng)一的編碼,基本上所有的字符都能找到,而ascll碼只是方便某一方面方便使用才出現(xiàn)的,而它字符包含得也不是很多。
評(píng)論
圖片
表情
