js模擬實(shí)現(xiàn)Array的sort方法
JavaScript的Array對(duì)象有一個(gè)sort方法,用于實(shí)現(xiàn)對(duì)數(shù)組元素的排序,該方法默認(rèn)按照數(shù)組項(xiàng)ASCII 字符順序升序排列。
如[6,7,9,1,-1].sort();執(zhí)行后數(shù)組變?yōu)閇-1,1,6,7,9]。
對(duì)于需要降序排列或非字符串排序,該方法就不能很好的執(zhí)行了。
當(dāng)然,sort有一個(gè)可選參數(shù),它能幫我們解決這個(gè)問(wèn)題,通過(guò)為sort傳入一個(gè)函數(shù),sort根據(jù)函數(shù)返回值進(jìn)行排序。
數(shù)組為該函數(shù)默認(rèn)傳入數(shù)組中的兩個(gè)元素,如傳入a,b,如果函數(shù)返回值大于0,則排序方式為b,a,如果返回值小于0,則排序結(jié)果為a,b。
具體含義不好解釋,當(dāng)初我也對(duì)這個(gè)sort其到底是怎么排序的不理解。
如果知道了其實(shí)現(xiàn)過(guò)程,就對(duì)他的排序原理明了了。
sort的實(shí)現(xiàn)其實(shí)很像是一個(gè)簡(jiǎn)單的冒泡排序。
偶今日對(duì)其進(jìn)行了模擬,看懂這個(gè)函數(shù)你一定就明白sort的原理了。
<script type="text/javascript"> <!-- var myarray = new Array(8,6,7,9,1,-1,4); var myarray1 = new Array(8,6,7,9,1,-1,4); var sortAsc = function(x,y) { return x-y; }; var sortDesc = function(x,y) { return y-x; }; Array.prototype.st=function(fn){ var t; fn=fn||function(x,y){return x-y}; for(var i=0;i<this.length;i++){ for(var j=i;j<this.length;j++){ if(fn(this[i],this[j])>0){ t=this[i]; this[i]=this[j]; this[j]=t; } } } } myarray.st(); alert("默認(rèn)升序排列:"+myarray); myarray.st(sortDesc); alert("降序排列:"+myarray); myarray.st(sortAsc); alert("升序排列:"+myarray); myarray1.sort(function(){return 1}); //注:js默認(rèn)的sort對(duì)此排序結(jié)果跟這個(gè)不一樣,其排序方式還暫不理解 alert("逆序排列:"+myarray1); //--> </script>
總結(jié)
以上所述是小編給大家介紹的js模擬實(shí)現(xiàn)Array的sort方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
JavaScript判斷一個(gè)變量是否是數(shù)組的五種方式總結(jié)
在 JavaScript 編程中,我們經(jīng)常需要對(duì)不同類型的變量進(jìn)行判斷和處理,其中,判斷一個(gè)變量是否是數(shù)組是一項(xiàng)基本且常見的任務(wù),在本篇博客中,我們將介紹幾種常用的方式來(lái)判斷一個(gè)變量是否是數(shù)組,并探討它們的優(yōu)缺點(diǎn)以及適用場(chǎng)景,需要的朋友可以參考下2023-11-11js省市區(qū)級(jí)聯(lián)查詢(插件版&無(wú)插件版)
這篇文章主要為大家詳細(xì)介紹了js省市區(qū)級(jí)聯(lián)查詢,包括插件版和無(wú)插件版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Javascript實(shí)現(xiàn)的鼠標(biāo)經(jīng)過(guò)時(shí)播放聲音
今天突然想起做一個(gè)當(dāng)鼠標(biāo)經(jīng)過(guò)<a/>時(shí),會(huì)發(fā)出聲音2010-05-05javascript刪除html標(biāo)簽函數(shù)cIsHTML
這篇文章主要介紹了javascript刪除html標(biāo)簽函數(shù)cIsHTML,需要的朋友可以參考下2017-01-01BootStrap Fileinput插件和Bootstrap table表格插件相結(jié)合實(shí)現(xiàn)文件上傳、預(yù)覽、提交的導(dǎo)入E
這篇文章主要介紹了BootStrap Fileinput插件和Bootstrap table表格插件相結(jié)合實(shí)現(xiàn)文件上傳、預(yù)覽、提交的導(dǎo)入Excel數(shù)據(jù)操作步驟,需要的朋友可以參考下2017-08-08原生JS實(shí)現(xiàn)手動(dòng)輪播圖效果實(shí)例代碼
手動(dòng)輪播圖,為輪播圖中的一種,輪播圖主要有無(wú)縫輪播,手動(dòng)輪播,延遲輪播,切換輪播等等,輪播圖主要用于展現(xiàn)圖片,新出商品,詞條,又能美觀網(wǎng)頁(yè)。給網(wǎng)頁(yè)中增加動(dòng)態(tài)效果。接下來(lái)通過(guò)本文給大家分享原生JS實(shí)現(xiàn)手動(dòng)輪播圖的實(shí)例代碼,一起看看吧2018-11-11javascript中動(dòng)態(tài)函數(shù)用法實(shí)例分析
這篇文章主要介紹了javascript中動(dòng)態(tài)函數(shù)用法,實(shí)例分析了動(dòng)態(tài)函數(shù)的定義方法與使用技巧,需要的朋友可以參考下2015-05-05創(chuàng)建與框架無(wú)關(guān)的JavaScript插件
這篇文章主要介紹了創(chuàng)建與框架無(wú)關(guān)的JavaScript插件,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下2020-12-12