JavaScript提供了sort()方法和reverse()方法,使得我們可以簡(jiǎn)單的對(duì)數(shù)組進(jìn)行排序操作和逆序操作。其中:
1.JavaScript的sort()中如果沒(méi)有指定比較函數(shù),則默認(rèn)會(huì)按照字符的編碼順序進(jìn)行升序排序。也就是說(shuō)如果我們想要對(duì)數(shù)值進(jìn)行排序得到的不一定是我們想要的結(jié)果。
2.Javascript的reverse()將數(shù)組中的元素逆序。
先看看上面的第一點(diǎn),如果有一個(gè)數(shù)組arr=[1,6,3,7,9],使用arr.sort()后,數(shù)組的順序?yàn)?,3,6,7,9,得到了我們想要的結(jié)果。
再看看下面的一個(gè)數(shù)組排序:arr=[3,1,16,34,30],如果執(zhí)行arr.sort()后是不是還是會(huì)得到我們想要的1,3,16,30,34呢?
執(zhí)行后我們發(fā)現(xiàn)結(jié)果為:1,16,3,30,34,顯然結(jié)果不是我們想要的。實(shí)際上,sort方法將上面的數(shù)值按照字符串方式排序了,也就是說(shuō)和數(shù)組arr1=['3','1','16','34','30']的排序結(jié)果一致。
代碼如下:
var arr=[3,1,16,34,30]; var arr1=['3','1','16','34','30']; alert(arr.sort()); // 1,16,3,30,34 alert(arr1.sort()); // 1,16,3,30,34
那么如果我們想要得到正確的結(jié)果:1,3,16,30,34 應(yīng)該怎么去做呢?
查詢javascript手冊(cè),手冊(cè)中的說(shuō)明如下:
====================================
定義和用法
sort() 方法用于對(duì)數(shù)組的元素進(jìn)行排序。
語(yǔ)法
arrayObject.sort(sortby)
參數(shù) | 描述 |
---|---|
sortby | 可選。規(guī)定排序順序。必須是函數(shù)。 |
返回值
對(duì)數(shù)組的引用。請(qǐng)注意,數(shù)組在原數(shù)組上進(jìn)行排序,不生成副本。
說(shuō)明
如果調(diào)用該方法時(shí)沒(méi)有使用參數(shù),將按字母順序?qū)?shù)組中的元素進(jìn)行排序,說(shuō)得更精確點(diǎn),是按照字符編碼的順序進(jìn)行排序。要實(shí)現(xiàn)這一點(diǎn),首先應(yīng)把數(shù)組的元素都轉(zhuǎn)換成字符串(如有必要),以便進(jìn)行比較。
如果想按照其他標(biāo)準(zhǔn)進(jìn)行排序,就需要提供比較函數(shù),該函數(shù)要比較兩個(gè)值,然后返回一個(gè)用于說(shuō)明這兩個(gè)值的相對(duì)順序的數(shù)字。比較函數(shù)應(yīng)該具有兩個(gè)參數(shù) a 和 b,其返回值如下:
=====================================
由以上說(shuō)明我們可以了解到,如果要按照數(shù)值進(jìn)行排序,那么就要提供一個(gè)比較函數(shù)。一般常見的比較函數(shù)如下:
function sortArr(m,n){ if(m<n) return -1;//小于,返回-1 else if(m>n) return 1;//大于,返回1 else return 0;//等于,返回0 }
function sortArr(m,n){ return m-n; }
function sortArr(m,n){ return m>n?1:(m<n?-1:0); }
然后執(zhí)行arr.sort(sortArr),發(fā)現(xiàn)可以得到我們想要的結(jié)果:1,3,16,30,34.也就說(shuō)將數(shù)組按照整型數(shù)值進(jìn)行了升序排序。
這樣的話新的問(wèn)題就來(lái)了,如果我們想要對(duì)數(shù)組進(jìn)行降序排序怎么做呢?
有一思路就是改變sortArr函數(shù)的返回值,如果m<n時(shí)返回正直,m>n時(shí)返回負(fù)值,m=n時(shí)返回0。這樣就可以了。
你可以寫兩個(gè)函數(shù),一個(gè)升序,一個(gè)降序。然后根據(jù)不同的需要調(diào)用不同的函數(shù)就可以了。
此外我們還可以調(diào)用上面提到的另一個(gè)函數(shù)reverse()來(lái)輕松的實(shí)現(xiàn),當(dāng)我們進(jìn)行升序排序后,然后數(shù)組在調(diào)用reverse()方法將數(shù)組逆序,這樣就可以實(shí)現(xiàn)數(shù)組的降序排序了。
代碼如下:
arr.sort(sortArr).reverse();
總結(jié):這里主要介紹了Javascript中數(shù)組的排序,由于默認(rèn)按照字符串排序,要實(shí)現(xiàn)按照其他形式的規(guī)則排序就要自己定義比較函數(shù)了。