js裡關於Array.prototype.sort分析及日常使用技巧
介紹
對陣列內容進行排序,可傳入比較器定義排序規則
使用
arr.sort(compare)
- compare比較器可傳可不傳
- 不傳將根據內容開頭的第一個字元的Unicode指標順序進行排序
var fruit = ['cherries', 'apples', 'bananas'];
fruit.sort();
// ['apples', 'bananas', 'cherries']
var scores = [1, 10, 21, 2];
scores.sort();
// [1, 10, 2, 21]
// 注意10在2之前,
// 因為在 Unicode 指標順序中10的首個字元1在2前面
var things = ['word', 'Word', '1 Word', '2 Words'];
things.sort();
// ['1 Word', '2 Words', 'Word', 'word']
// 在Unicode中, 數字在大寫字母之前,
// 大寫字母在小寫字母之前.
比較器講解
我們可通過傳入函式(比較器)來自定義sort的排序。
比較器主要多次對比相鄰的2個數來決定他們的先後順序, 這點與氣泡排序很相似。
var list = [0,2,4,3,5,7];
var compare = function(a,b) {
//該函式將多次被執行直到陣列的最後一位
if(a>b) return -1; //如果負數 那麼a位於b前面
else if(a<b) return 1; //如果正數 那麼a位於b後面
else return 0 //返回0位置不變
}
list.sort(compare) //[7, 5, 4, 3, 2, 0]
- 沒錯 很快你會得出結論 他們的順序是根據 返回的負(a在b前) 或 正(a在b後) 來決定的
升級版
var compare = function(a,b) {
return b-a //總結成了公式
}
list.sort(compare)//[7, 5, 4, 3, 2, 0]
日常使用的技巧
因為比較器的存在 讓我們處理起資料結構更加遊刃有餘
- 場景1 對返回的data根據他們的名稱首字元進行內容升序排序 如果isTop為true則該項置頂
var list = [{id:1,isTop:false,name:"ben"},
{id:2,isTop:false,name:"july"},
{id:3,isTop:true,name:"summer"},
{id:4,isTop:false,name:"jaky"}]
var compare = function(a, b) {
if(a.isTop) return -1;
if(b.isTop) return 1;
var aName = a.name.toLowerCase();
var bName = b.name.toLowerCase();
return aName > bName? 1 : aName < bName ? -1 : 0
}
list.sort(compare)
/*[{"id":3,"isTop":true,"name":"summer"},
{"id":1,"isTop":false,"name":"benc"},
{"id":4,"isTop":false,"name":"jaky"},
{"id":2,"isTop":false,"name":"july"}]*/
- 場景2 打亂陣列內容所對應索引值
var list = [1,3,5,7,9];
var compare = function() {
return 0.5 - Math.random()
}
list.sort(compare) //[5, 3, 9, 7, 1];
相關文章
- 關於jQuery UI 使用心得及技巧jQueryUI
- 關於逗號( , )在JS中的使用技巧JS
- 關於JS裡的字元表情亂碼JS字元
- 關於js回撥方法及遞迴時的使用JS遞迴
- 乾貨技巧|關於Redis的16個使用技巧Redis
- 關於儲存及CSS的一些技巧CSS
- Android 關於WebView的使用技巧小解AndroidWebView
- 關於jsp裡面:response.setContentType();JS
- 關於jsp中使用jstl薦JS
- Oracle DBA職責及日常工作分析Oracle
- 筆記本日常使用中的省電技巧筆記
- 【ios】關於[self.tableView reloadData]使用技巧iOSView
- 關於JSON的簡單使用JSON
- Oracle DBA職責及日常工作分析(轉)Oracle
- api日常總結:前端常用js函式和CSS常用技巧API前端JS函式CSS
- nodeJS丶Buff使用及相關APINodeJSAPI
- 關於desc的一個奇怪問題及分析
- 關於oracle的索引重建問題及原因分析Oracle索引
- 關於GJSON包的簡單使用JSON
- 關於使用iview中Table元件的一點小技巧View元件
- VERITA備份日常監控及相關命令操作
- 【主流技術】日常工作中關於 JSON 轉換的經驗大全(Java)JSONJava
- 寶付分析關於ExtJS與JQuery支付對比JSjQuery
- 關於一個使用者SQL慢查詢問題的分析及優化SQL優化
- 關於 JS 陣列,物件 length 使用的坑JS陣列物件
- 關於leetdcode刷題技巧
- 日常生活小技巧 -- vim 中 ctags 的安裝和使用
- 關於 Node.js 應用裡使用 winston 進行日誌記錄的最佳實踐Node.js
- 關於CPU使用率高的awr分析
- 關於如何寫UI及螢幕適配的一些技巧(上)UI
- 關於如何寫UI及螢幕適配的一些技巧(下)UI
- 如何做好資訊流廣告日常投放及資料分析?GEG
- 使用lambda在Ruby裡模仿實現JS的物件及原型繼承JS物件原型繼承
- Python爬蟲之JS逆向分析技巧Python爬蟲JS
- 關於PHP程式設計中的變數使用技巧小結PHP程式設計變數
- ACCESS 關於表設計中,驗證規則的使用技巧
- 關於使用中介軟體實現返回 JSONJSON
- FTP命令詳解及使用技巧FTP