javascript
深入探讨JS中的数组排序函数sort()和reverse()
最近在研究Javascript發(fā)現(xiàn)了其中一些比較靈異的事情。有點讓人感到無語比如:
alert(typeof( NaN == NaN));//結(jié)果為假。
alert(typeof( NaN != NaN));//結(jié)果為真。
嘿嘿,當然這個不是這篇文章要討論的!!開始我們的正文
首先,我們來看一下JS中sort()和reverse()這兩個函數(shù)的函數(shù)吧
reverse();這個函數(shù)是用來進行倒序,這個沒有什么可說的,所謂倒序就是大的在前面,小的在后面。
比如:
var array1 = [0,1,5,10,15];
array1.reverse();//結(jié)果為:15,10,5,1,0
sort([參數(shù)]);這個函數(shù)是用來對數(shù)組進行正序排列的,但是,我發(fā)現(xiàn)了,大家好像都比較常規(guī)的把這個函數(shù)給大多數(shù)語言一樣的使用!!但是,沒錯,你發(fā)現(xiàn)了這個函數(shù)其實是有參數(shù)的。
反正,在我們學習JS這門課程的時候,老師是沒有講解這個函數(shù)是有這個參數(shù)的。
剛剛我已經(jīng)說了,它給我們其它語言的正序排列函數(shù)是有區(qū)別的,給大家舉個例子吧.
var array1 = [0,1,5,10,15];
array1.sort();//結(jié)果為:0,1,10,15,5
大家可以自己去試試看看是不是這個結(jié)果!!當我看到結(jié)果的時候,有點不知道為什么。難道,這個函數(shù)不是做正序排列,于是去網(wǎng)上找了相關(guān)資料,在W3CSchool中看到,這個函數(shù)的一些說明。如下圖
?
?
大家仔細閱讀上圖中的解釋,其中我用紅線部分的地方,是這個函數(shù)在進行排序的過程影響其值的根本原因。(其實,在使用sort()進行排序的時候會調(diào)用toString()函數(shù)將其值轉(zhuǎn)換成字符串在進行比較,是按ASCII進行比較的)
哪么不難理解:1的ASCII值肯定要比5的ASCII值小,由于是正序哪么越小的就越在前面!!哪么我們要怎么做才能正確的使其排序達到我們想要的效果 呢。這個時候,就會使用,sort()中的參數(shù)了。這參數(shù)指向的是一個函數(shù)!我相信大家看到上面的圖,我就不在做過多的解釋了。看一下,下面的代碼,我在 分析一下,他的實現(xiàn)過程吧。
?
function con(v1,v2) {if (v1<v2) {return -1; }else if(v1>v2){return 1;}else{return 0;} }?
?
注:sort() 方法可以接受一個 方法為參數(shù) ,這個方法有兩個參數(shù)。分別代表每次排序比較時的兩個數(shù)組項。sort()排序時每次比較兩個數(shù)組項都回執(zhí)行這個參數(shù),并把兩個比較的數(shù)組項作為參數(shù)傳遞 給這個函數(shù)。當函數(shù)返回值為1的時候就交換兩個數(shù)組項的順序,否則就不交換。
首先,要說明一下!排序算法是離不開冒泡算法的!這里同樣是使用了冒泡算法,但是我們要怎么來理解這個算定義函數(shù)呢!
這個算定義函數(shù)必須有兩個參數(shù)(這個在進行排序,換而言之就是誰大誰就在前面!!就是比較大小。)
函數(shù)的的意思是,當v1<V2為-1,V1>v2為1,v1==v2為0
<V2為-1,V1>
<V2為-1,V1>
根據(jù)冒泡算法:傳遞兩個值給v1和v2,array[0] ="0",array[1]="2" 那么,v1=0,v2=2,
第一輪:按照上面的規(guī)定,不交換位置,那么第一次下來是:0,2,1,0.5因為0比任何的數(shù)都小所以第一輪結(jié)束,他始終在最前面我就不分析了
第二輪:v1=2,v2=1;
第一次:由于v1>v2所以v1和v2的值交換位置結(jié)果為:0,1,2,0.5;
第二次:這個時候v1=1,v2=2進行比較結(jié)題為:0,1,2,0.5,
第三次:這個時候v1=1,v2=0.5由于v1>v2所以v2和v2交換位置,其結(jié)果為:0,0.5,1,2
第四次:這個時候v1=0.5,v2=2進行比較其結(jié)果為:0,0.5,1,2
第三輪:v1=1,v2=2;
第一次:進行比較其結(jié)果為0,0.5,1,2這個時候由于已經(jīng)到數(shù)組的么尾了。退出函數(shù)。返回結(jié)果。
好了,這個就是sort()函數(shù)的一個探討,希望,大家看完此文章對JS的排序函數(shù)有一個比較深入的了解。當然,我講解的這種寫法是一種比較通用的寫法, 大家也可以按照自己的需要寫一下,倒序,大、小寫等 等 ...這里就不在多說了!!可能有些許地方,講解得不夠好。希望大家能夠諒解。如果有什么疑問,請在文章下面留言。
轉(zhuǎn)載于:https://www.cnblogs.com/RuMengkai/p/6501408.html
總結(jié)
以上是生活随笔為你收集整理的深入探讨JS中的数组排序函数sort()和reverse()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java访问权限的范围
- 下一篇: SpringMVC搭建+实例