JS中sort 方法的用法,引數以及排序原理

2022-06-16 23:03:21 字數 1712 閱讀 1154

sort()方法用於對陣列的元素進行排序,並返回陣列。預設排序順序是根據字串unicode碼點。

語法:arrayobject.sort(sortby);引數sortby可選。規定排序順序。必須是函式。

注:如果呼叫該方法時沒有使用引數,將按字母順序對陣列中的元素進行排序,說得更精確點,是按照字元編碼的順序進行排序。要實現這一點,首先應把陣列的元素都轉換成字串(如有必要),以便進行比較。

如果想按照其他標準進行排序,就需要提供比較函式,該函式要比較兩個值,然後返回乙個用於說明這兩個值的相對順序的數字。比較函式應該具有兩個引數 a 和 b,其返回值如下:

若 a 小於 b,在排序後的陣列中 a 應該出現在 b 之前,則返回乙個小於 0 的值。

若 a 等於 b,則返回 0。

若 a 大於 b,則返回乙個大於 0 的值。

例1:我們將建立乙個陣列,並按字母順序進行排序:

輸出:

george,john,thomas,james,adrew,martin

adrew,george,james,john,martin,thomas

例2:我們將建立乙個陣列,並按字母順序進行排序:

輸出:

10,5,40,25,1000,1

1,10,1000,25,40,5

請注意,上面的**沒有按照數值的大小對數字進行排序,要實現這一點,就必須使用乙個排序函式:

輸出:

10,5,40,25,1000,1

1,5,10,25,40,1000

這裡可以看出,如果安裝公升序排列,那麼方法為:

functionsortnumber(a,b)

如果是按照降序排列則為:

functionsortnumber(a,b)

當然如果想根據陣列物件中的某個屬性值進行排序呢?sort方法接收乙個函式作為引數,這裡巢狀一層函式用來接收物件屬性名,其他部分**與正常使用sort方法相同。

var arr =[,,

];functioncompare(property)

}console.log(arr.sort(compare('age')))

結果如圖所示:

如何根據引數不同,來確定是公升序排列,還是降序排序呢?

sortby: function(attr,rev)else

return function(a,b)

if(a >b)

return 0;}}

使用方式:

newarray.sort(sortby('number',false))
v8 引擎 sort 函式只給出了兩種排序 insertionsort 和 quicksort,數量小於10的陣列使用 insertionsort,比10大的陣列則使用 quicksort。

v8 引擎array原始碼 710行開始

js中sort()方法的用法,引數以及排序原理

sort 方法用於對陣列的元素進行排序。語法 arrayobject.sort sortby 引數sortby可選。規定排序順序。必須是函式。注 如果呼叫該方法時沒有使用引數,將按字母順序對陣列中的元素進行排序,說得更精確點,是按照字元編碼的順序進行排序。要實現這一點,首先應把陣列的元素都轉換成字串...

JS中sort 方法的用法,引數以及排序原理

sort 方法用於對陣列的元素進行排序,並返回陣列。預設排序順序是根據字串unicode碼點。語法 arrayobject.sort sortby 引數sortby可選。規定排序順序。必須是函式。注 如果呼叫該方法時沒有使用引數,將按字母順序對陣列中的元素進行排序,說得更精確點,是按照字元編碼的順序...

js中的sort方法

js中原生的sort 採用快排和插入排序演算法,根據比較器對陣列排序。預設是將陣列元素轉為字串,然後根據unicode字符集編號的大小排序。charcodeat index 返回指定位置字元的 unicode 編號,取值是 0 65535 間的整數,與 charat 方法執行的操作相似,後者返回的是...