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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

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

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

最近在研究Javascript發(fā)現(xiàn)了其中一些比較靈異的事情。有點(diǎn)讓人感到無(wú)語(yǔ)比如:

  alert(typeof( NaN == NaN));//結(jié)果為假。

  alert(typeof( NaN != NaN));//結(jié)果為真。

  嘿嘿,當(dāng)然這個(gè)不是這篇文章要討論的!!開始我們的正文

  首先,我們來(lái)看一下JS中sort()和reverse()這兩個(gè)函數(shù)的函數(shù)吧

  reverse();這個(gè)函數(shù)是用來(lái)進(jìn)行倒序,這個(gè)沒(méi)有什么可說(shuō)的,所謂倒序就是大的在前面,小的在后面。

  比如:

  var array1 = [0,1,5,10,15];

  array1.reverse();//結(jié)果為:15,10,5,1,0

  sort([參數(shù)]);這個(gè)函數(shù)是用來(lái)對(duì)數(shù)組進(jìn)行正序排列的,但是,我發(fā)現(xiàn)了,大家好像都比較常規(guī)的把這個(gè)函數(shù)給大多數(shù)語(yǔ)言一樣的使用!!但是,沒(méi)錯(cuò),你發(fā)現(xiàn)了這個(gè)函數(shù)其實(shí)是有參數(shù)的。

  反正,在我們學(xué)習(xí)JS這門課程的時(shí)候,老師是沒(méi)有講解這個(gè)函數(shù)是有這個(gè)參數(shù)的。

  剛剛我已經(jīng)說(shuō)了,它給我們其它語(yǔ)言的正序排列函數(shù)是有區(qū)別的,給大家舉個(gè)例子吧.

  var array1 = [0,1,5,10,15];

  array1.sort();//結(jié)果為:0,1,10,15,5

  大家可以自己去試試看看是不是這個(gè)結(jié)果!!當(dāng)我看到結(jié)果的時(shí)候,有點(diǎn)不知道為什么。難道,這個(gè)函數(shù)不是做正序排列,于是去網(wǎng)上找了相關(guān)資料,在W3CSchool中看到,這個(gè)函數(shù)的一些說(shuō)明。如下圖

  

?

?

  大家仔細(xì)閱讀上圖中的解釋,其中我用紅線部分的地方,是這個(gè)函數(shù)在進(jìn)行排序的過(guò)程影響其值的根本原因。(其實(shí),在使用sort()進(jìn)行排序的時(shí)候會(huì)調(diào)用toString()函數(shù)將其值轉(zhuǎn)換成字符串在進(jìn)行比較,是按ASCII進(jìn)行比較的)

  哪么不難理解:1的ASCII值肯定要比5的ASCII值小,由于是正序哪么越小的就越在前面!!哪么我們要怎么做才能正確的使其排序達(dá)到我們想要的效果 呢。這個(gè)時(shí)候,就會(huì)使用,sort()中的參數(shù)了。這參數(shù)指向的是一個(gè)函數(shù)!我相信大家看到上面的圖,我就不在做過(guò)多的解釋了。看一下,下面的代碼,我在 分析一下,他的實(shí)現(xiàn)過(guò)程吧。

  

?

function con(v1,v2) {if (v1<v2) {return -1; }else if(v1>v2){return 1;}else{return 0;} }

?

?

  注:sort() 方法可以接受一個(gè) 方法為參數(shù) ,這個(gè)方法有兩個(gè)參數(shù)。分別代表每次排序比較時(shí)的兩個(gè)數(shù)組項(xiàng)。sort()排序時(shí)每次比較兩個(gè)數(shù)組項(xiàng)都回執(zhí)行這個(gè)參數(shù),并把兩個(gè)比較的數(shù)組項(xiàng)作為參數(shù)傳遞 給這個(gè)函數(shù)。當(dāng)函數(shù)返回值為1的時(shí)候就交換兩個(gè)數(shù)組項(xiàng)的順序,否則就不交換。

  首先,要說(shuō)明一下!排序算法是離不開冒泡算法的!這里同樣是使用了冒泡算法,但是我們要怎么來(lái)理解這個(gè)算定義函數(shù)呢!

  這個(gè)算定義函數(shù)必須有兩個(gè)參數(shù)(這個(gè)在進(jìn)行排序,換而言之就是誰(shuí)大誰(shuí)就在前面!!就是比較大小。)

  函數(shù)的的意思是,當(dāng)v1<V2為-1,V1>v2為1,v1==v2為0

<V2為-1,V1>

<V2為-1,V1>

  根據(jù)冒泡算法:傳遞兩個(gè)值給v1和v2,array[0] ="0",array[1]="2" 那么,v1=0,v2=2,

  第一輪:按照上面的規(guī)定,不交換位置,那么第一次下來(lái)是:0,2,1,0.5因?yàn)?比任何的數(shù)都小所以第一輪結(jié)束,他始終在最前面我就不分析了

  第二輪:v1=2,v2=1;

  第一次:由于v1>v2所以v1和v2的值交換位置結(jié)果為:0,1,2,0.5;

  第二次:這個(gè)時(shí)候v1=1,v2=2進(jìn)行比較結(jié)題為:0,1,2,0.5,

  第三次:這個(gè)時(shí)候v1=1,v2=0.5由于v1>v2所以v2和v2交換位置,其結(jié)果為:0,0.5,1,2

  第四次:這個(gè)時(shí)候v1=0.5,v2=2進(jìn)行比較其結(jié)果為:0,0.5,1,2

  第三輪:v1=1,v2=2;

  第一次:進(jìn)行比較其結(jié)果為0,0.5,1,2這個(gè)時(shí)候由于已經(jīng)到數(shù)組的么尾了。退出函數(shù)。返回結(jié)果。

  好了,這個(gè)就是sort()函數(shù)的一個(gè)探討,希望,大家看完此文章對(duì)JS的排序函數(shù)有一個(gè)比較深入的了解。當(dāng)然,我講解的這種寫法是一種比較通用的寫法, 大家也可以按照自己的需要寫一下,倒序,大、小寫等 等 ...這里就不在多說(shuō)了!!可能有些許地方,講解得不夠好。希望大家能夠諒解。如果有什么疑問(wèn),請(qǐng)?jiān)谖恼孪旅媪粞浴?/p>

轉(zhuǎn)載于:https://www.cnblogs.com/RuMengkai/p/6501408.html

總結(jié)

以上是生活随笔為你收集整理的深入探讨JS中的数组排序函数sort()和reverse()的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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