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。
具體含義不好解釋?zhuān)?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)文章
JS獲取當(dāng)前使用的瀏覽器名字以及版本號(hào)實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇JS獲取當(dāng)前使用的瀏覽器名字以及版本號(hào)實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08
微信小程序中使用 async/await的方法實(shí)例分析
這篇文章主要介紹了微信小程序中使用 async/await的方法,結(jié)合實(shí)例形式分析了微信小程序中async/await的功能、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-05-05
如何確保JavaScript的執(zhí)行順序 之實(shí)戰(zhàn)篇
我曾在文章《如何在多個(gè)頁(yè)面使用同一個(gè)HTML片段 - 續(xù)》的最后提到JavaScript順序執(zhí)行的特性。雖然現(xiàn)代瀏覽器可以并行的下載JavaScript(部分瀏覽器),但考慮到JavaScript的依賴關(guān)系,他們的執(zhí)行依然是按照引入順序進(jìn)行的。2011-03-03
JavaScript使用IEEE 標(biāo)準(zhǔn)進(jìn)行二進(jìn)制浮點(diǎn)運(yùn)算產(chǎn)生莫名錯(cuò)誤的解決方法
javascript做帶小數(shù)的計(jì)算時(shí),會(huì)出現(xiàn)9的循環(huán),以下方法幫助解決。2011-05-05
JavaScript切換搜索引擎的導(dǎo)航網(wǎng)頁(yè)搜索框?qū)嵗a
這篇文章主要介紹了javascript切換搜索引擎的導(dǎo)航網(wǎng)頁(yè)搜索框的實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值 ,需要的朋友可以參考下2017-06-06
深入理解JavaScript系列(6):S.O.L.I.D五大原則之單一職責(zé)SRP
Bob大叔提出并發(fā)揚(yáng)了S.O.L.I.D五大原則,用來(lái)更好地進(jìn)行面向?qū)ο缶幊?/div> 2012-01-01最新評(píng)論

