陣列中的重排序方法原理分析

2021-07-31 04:25:04 字數 1654 閱讀 6058

重排序方法

陣列中已經存在兩個可以直接用來重排序的方法: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

(value1, value2) else

if (value1 > value2) else

}

這個比較函式可以適用於大多數資料型別,只要將其作為引數傳遞給sort()方法即可,如下面這個例子所示。

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

values.sort(compare);

alert(values); //0,1,5,10,15

在將比較函式傳遞到sort()方法之後,數值仍然保持了正確的公升序。當然,也可以通過比較函式產生降序排序的結果,只要交換比較函式返回的值即可。

function

compare

(value1, value2) else

if (value1 > value2) else

}

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

values.sort(compare);

alert(values); // 15,10,5,1,0

在這個修改後的例子中,比較函式在第乙個值應該位於第二個之後的情況下返回1,而在第乙個值應該在第二個之前的情況下返回-1。交換返回值的意思是讓更大的值排位更靠前,也就是對陣列按照降 序排序。當然,如果只想反轉陣列原來的順序,使用reverse()方法要更快一些。

reverse()和sort()方法的返回值是經過排序之後的陣列。

陣列重排序方法

reverse 和sort 方法的返回值是經過排序後的陣列。reverse 方法會反轉陣列項的順序 var values 1,2,3,4,5 values.reverse alert values 5,4,3,2,1 在預設情況下,sort 方法按公升序排列陣列,sort 方法會呼叫每個陣列項的to...

JavaScript 陣列的重排序方法

陣列中有兩個可以直接用來排序的方法 reverse 和sort reverse 方法 反轉陣列項的排列順序,即逆序排列之前的陣列。例1 使用reverse 方法排列陣列 var arr 12,2,31,4,55,38 alert arr.reverse 輸出結果為 38,55,4,31,2,12 s...

學習 檢測陣列 重排序方法

1.可以用type of 來檢測每個屬性是否存在 2.陣列的 length 屬性不是唯讀的 因此通過這個屬性 可以從陣列的末尾移除項或向陣列中新增新項 eg 移除 var colors red yellow grown colors.length 2 alert colors.length unde...