日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

深入探讨JS中的数组排序函数sort()和reverse()

發(fā)布時間:2023/12/1 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入探讨JS中的数组排序函数sort()和reverse() 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近在研究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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。