原理
JS中的sort()方法用於對數組進行排序,並返回數組。
默認情況下按升序排列數組,但是是根據字符串UniCode碼進行比較。sort()方法進行排序時會在每一項上調用String()轉型函數,然后通過字符串UniCode碼來決定順序,即使數組的元素都是number類型,也會把它轉換成字符串再比較。
為此,sort()方法可以接受一個參數,此參數為函數,從而達到我們想要的比較效果。
使用
沒有傳入參數時:
var arr = [2,15,8,11,7,4]; console.log(arr.sort()); //11 15 2 4 7 8
顯而易見,這不是我們想要的效果,但是我們可以在sort()方法里面傳入一個比較函數來達到我們想要的效果:
/** * 比較函數:接收兩個參數 * @param val1 * @param val2 * @returns {number} */ function compare(val1,val2){ if (val1 < val2){ return -1; }else if(val1 > val2){ return 1; }else { return 0; } } var arr = [2,15,8,11,7,4]; console.log(arr.sort(compare)); //2 4 7 8 11 15
可以把返回值1和-1換一下位置達到降序。此外,這個比較函數還可以簡寫成箭頭函數:
var arr = [2,15,8,11,7,4]; arr.sort((a,b) => a < b ? 1:a > b ? -1:0) console.log(arr); //15 11 8 7 4 2