A. js數組排序
JS數組排序方法有兩個: reverse() 和 sort() ,其中 reverse() 可將數組進行倒序,而 sort() 則可將數組項靈活地進行升序或降序排列。
可以看出, reverse() 會直接改變原數組,並且返回值也是倒序後的數組。
記得當年學C語言時,要學各種各樣的排序演算法,比如經典的冒泡排序法、二分排序法等,現在拋開這些演算法不說,JS就自帶原生的排序函數,用起來非常方便,它就是 sort() 。
可以看出, sort() 不傳參數時會按升序方式對數組項進行排序,並且與 reverse() 一樣既改變原數組,同時返回的也是排序後的數組。
我們再來看下一個例子:
這時你可能會說,不對呀,最終排序返回的不應該是 [8, 9, 16, 90] 嗎?然鵝事實返回的卻是 [16, 8, 9, 90] ,這到底是哪門子邏輯?
事實上, sort() 並不是按照數值進行排序,而是按字元串字母的ASCII碼值進行比較排序的,所以當數組項為數字時, sort() 也會自動先將數字轉換成字元串,然後再按字母比較的規則進行排序處理。
現在我們再回頭看看前面兩個例子。當 arr 為 [8,4,9,1] 時,數組每一項轉換成字元串後進行排序的結果正好與數字排序結果相同;而當 arr 為 [8,90,9,16] 時,數組每一項轉換成字元串後就得按順序一位一位進行比較,比如升序排序時,「16」應該排在最前面,因為「16」的第一位是「1」,比「8」和「9」的ASCII碼值都要小。
啰嗦了這么多,其實我們實際很少會使用這種排序方式,而更多的應該就是純數字的排序。那麼我們該如何正確地使用 sort() 來達到預期的排序效果呢?
接下來就來看看傳參後的 sort() 能給我們怎樣的精彩表現。
這個函數參數功能其實很簡單,實際上就是告訴 sort() 排序方式到底是升序還是降序,我們還是來看具體實例吧~
這種用法的規則是,當 sort() 傳入函數中的第一個參數a位於第二個參數b之前,則返回一個負數,相等則返回0,a位於b之後則返回正數。
比如,當要做升序排序時,我們需要想到前面的數肯定是要比後面的數小,所以傳入的這個函數參數返回值應該要是個負數,因此函數參數返回 a - b 。
如果實在不好理解,我們可以乾脆記下來, a - b 升序, b - a 降序,但是需要注意的是,如果按照這種記憶方式的話,函數括弧內的兩個參數 a 和 b 的書寫順序可不能顛倒哦~
B. Js中的數組sort()排序問題
比較函數的參數 v1 和 v2 代表數組里的兩個元素
如果 v1 小於 v2,排序後的數組 v1 在 v2 前面,此時返回一個內負數 (即上面的 return -1)容
如果 v1 等於 v2,排序後兩者位置不變,此時返回 0(即上面的 return 0)
如果 v1 大於 v2,排序後 v1 在v2 後面, 返回一個正數(即上面的 return 1)
//比較函數一般簡寫成:
arr.sort(function(a,b){
returna-b//升序
});
arr.sort(function(a,b){
returnb-a//降序
});
//對應上面的解釋好好想下,不難理解為什麼這樣寫
C. JS之JQ的map/rece/filter/sort/reverse
map 是遍歷數組,並返回一個新數組.
rece 是遍歷數組,把所有元素組合到一起:
filter 是遍歷數組,根據條件篩選 得出一個新數組
與我們之前用的數組方法僅僅返回一個新數組不同, sort 方法將改變原數組,返回被排序後的數組。
默認 :按字母順序或數字順序對數組中的元素進行排序。
sort 可以把比較函數作為參數傳入。比較函數有返回值,當 a 小於 b,返回一個負數;當 a 大於 b ,返回一個正數;相等時返回0。
如果沒有傳入比較函數,它將把值全部轉成字元串,並按照字母順序進行排序。
下面的例子將展示 sort 的使用,傳入的比較函數把元素按照從小到大的順序進行排列:
reverse 對數組進行反轉,對元素組操作,返回反轉後的數組。
concat 方法可以用來把兩個數組的內容合並到一個數組中。
concat 方法的參數應該是一個數組。參喊物數中的數組會拼接在原數組的後面,並作為一個新數組返回。
下面是一個拼接數明滲岩組的例子,用concat 把激御 otherArray 拼接在 oldArray 的後面:
D. JS中數組重排序方法
1.數組中已存在兩個可直接用來重排序的方法:reverse()和sort()。
reverse()和sort()方法的返回值是經過排序後的數組。reverse()方法會反轉數組項的順序:
var
values=[1,2,3,4,5];
values.reverse();
alert(values);
//5,4,3,2,1
在默認情況下,sort()方法按升序排列數組,sort()方法會調用每個數組項的toString()轉型方法,然後比較得到字元串,確定如何排序。即使數組中的每一項都是數值,sort()方法比較的也是字元串:
var
values
=
[0,1,5,10,15];
values.sort();
alert(values);
//0,1,10,15,5
因此,sort()方法可以接收一個比較函數作為參數。
function
compare(value1,value2){
if
(value1
<
value2){
return
-1;
}else
if
(value1
>
value2){
return
1;
}else{
return
0;
}
}
此比較函數可適用於大多數數據類型,只要將其作為參數傳遞給sort()方法即可:
var
values
=
[0,1,3,7,9,15];
values.sort(compare);
alert(values);
//0,1,3,7,9,15
也可通過比較函數產生降序排序,只需交換函數返回值即可:
function
compare
(value1,
value2){
if
(value1<value2){
return
1;
}else
if
{
return
-1;
}else{
return
0;
}
}
sort()函數的排序條件是:
參數大於0,arr的相鄰兩個元素交換位置;
參數小於0,arr的相鄰兩個元素不交換位置;
參數等於0,arr的相鄰兩個元素大小相等;所以compare自定義函數必須返回一個數值。
2.對於數值類型或者valueOf()方法會返回數值類型的對象類型。
可使用一個更簡單的比較函數。此函數只要第二個值減第一個值即可。
function
compare
(value1,value2){
return
value2
-
value1;
}
以上所述是小編給大家介紹的JS中數組重排序方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
E. JS數組sort方法如何使用
定義和用法:
sort() 方法用於對數組的元素進行排序。
語法:
1
arrayObject.sort(sortby)
描述:
sortby 可選。規定排序順序。必須是函數。
返回值:
對數組的引用。請注意,數組在原數組上進行排序,不生成副本。
說明:
如果調用該方法時沒有使用參數,將按字母順序對數組中的元素進行排序,說得更精確點,是按照字元編碼的順序進行排序。要實現這一點,首先應把數組的元素都轉換成字元串(如有必要),以便進行比較。
如果想按照其他標准進行排序,就需要提供比較函數,該函數要比較兩個值,然後返回一個用於說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其返回值如下:
若 a 小於 b,在排序後的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。
若 a 等於 b,則返回 0。
若 a 大於 b,則返回一個大於 0 的值。
F. js中sort()對數組排序的原理是什麼為何無法降序字母
sort的函數裡面 a 和 b 一般都是number型或是可以轉換成number的字元串,進行減操作。
然而你的內代碼中容,a b 都為字母,無法進行減法操作,所以不能進行排序。
建議你用 d.sort().reaverse();