Javascript Array 重排序方法
數組中已經存在兩個可以直接用來重排序的方法:reverse()和sort()。有讀者可能猜到了,reverse()方法會對反轉數組項的順序。請看下面這個例子:
var values= [1, 2, 3, 4, 5];
values.reverse();
alert (values); //5,4,3,2,1
這里數組的初始值及順序是1、2、3、4、5。而調用數組的reverse()方法后,其值的順序變成了5、4、3、2、1。這個方法的作用相當直觀明了,但不夠靈活,因此才有了sort()方法。
在默認情況下,sort()方法按升序排列數組項——即最小的值位于最前面,最大的值排在最后面。為了實現排序,sort()方法會調用每個數組項的toString()轉型方法,然后比較得到的字符串,以確定如何排序。即使數組中的每一項都是數值,sort()方法比較的也是字符串,如下所示:
var values= [0, 1, 5, 10, 15];
values.sort();
alert (values); //0,1,10.15,5
可見,即使例子中值的順序沒有問題,但sort()方法也會根據測試字符串的結果改變原來的順序。因為數值5雖然小于10,但在進行字符串比較時,"10"則位于"5"的前面,于是數組的順序就被修改了。不用說,這種排序方式在很多情況下都不是最佳方案。因此sort()方法可以接收一個比較函數作為參數,以便我們指定哪個值位于哪個值的前面。
比較函數接收兩個參數,南昌網站制作工程師提示,如果第一個參數應該位于第二個之前則返回一個負數,如果兩個參數相等則返回0,如果第一個參數應該位于第二個之后則返回一個正數。以下就是一個簡單的比較函數:
function compare (valuel, value2) {
if (valuel return -1:
} else if (valuel>value2) {
return 1:
} else {
return 0:
}
}
這個比較函數可以適用于大多數數據類型,只要將其作為參數傳遞給sort()方法即可,如下面這個例子所示:
var values=[O, 1, 5, 10, 15];
alert (values); //0,1, 5,10,15
在將比較函數傳遞到sort()方法之后,數值仍然保持了正確的升序。當然,也可以通過比較函數產生降序排序的結果,只要交換比較函數返回的值即可:
function compare (valuel, value2) {
if(valuel < value2) {
}else if(valuel>value2) {
}else {
return O:
}
}
var values= [0, 1, 5, 10, 15];
values.sort (compare);
alert (values); // 15 ,10,5,1,0
在這個修改后的例子中,比較函數在第一個值應該位于第二個之后的情況下返回l,而在第一個值應該在第二個之前的情況下返回一1。.交換返回值的意思是讓更大的值排位更靠前,也就是對數組按 照降序排序。當然,如果只想反轉數組原來的順序,使用reverse()方法要更快一些。
南昌網頁設計公司工程師提醒,reverse()和sort()方法的返回值是經過排序之后的數組.
對于數值類型或者其valueOf()方法會返回數值類型的對象類型.可以使用一個更簡單的比較函數:這個函數只要用第二個值減第一個值即可①:
function compare (valuel, value2){
return value2 - valuel;
}
由于比較函數通過返回一個小于零、等于零或大于零的值來影響排序結果,因此減法操作就可以適當地處理所有這些情況。
①南昌建網站公司百恒網絡前端開發(fā)工程師,如果想要按照升序排序,則compare()函數中的return語句應該返回value2-value1.
希望本文對廣大站長或從事企業(yè)網站建設公司的團隊有所幫助,如對此不太理解的,可以與南昌做網站公司百恒網絡技術部聯系。我們很高興與廣大站長和從事企業(yè)網站建設公司技術人員分享我們的技術和經驗。