📌
about-sort-methods
面試題:JavaScript 中的 sort 傳入 (a,b) => b - a 會是升序還是降序?為什麼呢?
sort 是什麼
在 JavaScript 中,如果需要將陣列進行排序可以使用方便的 .sort()
來達成
sort 怎麼用?
在文件中關於 sort 的語法會寫到
arr.sort(compareFunction);
使用注意事項:
- compareFunction 非必填
雖然是非必填,但如果你真的不填,他就給你亂排www(依預設排序方式)
- 會改變原陣列
所以通常來說會在 compareFunction
填入兩個參數(a, b),並且回傳這兩個數比大小後的值來進行排序的規則,規則為:
if (a > b) {
return 1;
}
幫我將 b 排在 a 前面
if (a < b) {
return -1;
}
幫我將 a 排在 b 前面
a 等同 b
return 0
位置不變
依上面的規則就會將 compareFunction 寫成 (a, b) => b - a
,將陣列從大排到小;
反之,如果要從小排到大就會寫成 (a, b) => a - b
let arr = [56, 23, 43, 34, 1, 10];
arr.sort((a, b) => b - a);
//[56, 43, 34, 23, 10, 1] 降序的排列方式
逐條說明:
- 我們看陣列的第一跟第二個值:
a=56
b=23
b - a 小於 0,回傳 -1,對照上面規則將 a 放在 b 前面,此時為:56,23,... - 接著比對:
a=23
b=43
b - a 大於 0,回傳 1,對照規則將 b 排在 a 前面,此時為:56, 43, 23,...
最後排完就會從大到小的排序方式。
練習題
在 codewars 有一題要求將 Input 的值依大到小排序再回傳,就會用到 sort 的觀念
試著練習看看吧~
codewars(7kyu) - Descending Order
最後に
以上內容為個人的理解,如果有什麼想法也歡迎留言跟我分享,讓我可以學習更多。
Discussion