sort()語法:
數組
arrayObject.sort(fn);dom
參數fn可選,若是爲空,則按字母順序對數組中的元素進行排序,精確地說,是按照字符編碼順序進行排序。So,若是想實現精確排序,應把數組的元素轉換成字符串在進行排序。函數
想按照其餘標準排序,則需提供比較函數,沒錯,是函數,爲函數提供兩個參數,我的理解就是要排序的其中兩個元素。爲何會有這樣的猜想,看規則:編碼
function fn (m,n){ if(m<n) return -1;//小於,返回-1 else if(m>n) return 1;//大於,返回1 else return 0;//等於,返回0 }
精簡後:spa
function fn (m, n) { return m-n; }
若 m 小於n, 則返回一個小於0的數值,m 會出如今 n 的前面;code
若 m 等於 n, 則返回 0;排序
若 m 大於 n,則返回一個大於0的數值,m 會出如今 n 的後面;字符串
說白了,若是函數fn返回的值爲false,則按照升序排序,若是返回true,排序會降序排序;(m 和 n 按照排序後的順序比較)io
可是若是fn寫成這樣子呢?字符編碼
function fn (m, n) { return m < n; }
若是fn的返回值爲false,則按降序排序;若是返回true,排序會升序排序;(m 和 n 按照排序後的順序比較)
那,若是想隨機排序呢?
function fn () { return 0.5 - Math.random(); }
Math.random()返回一個0到1的隨機數,0.5 - Math.random() 就會隨機返回true和false,這樣就實現隨機排序了。
再一次感嘆JS的靈活,一個sort就能夠把排序搞定。