比較常見的解釋能夠看這裏:js的sort()方法,這篇博客寫得挺好的,通常的應用的理解已經足夠了。html
可是若是要活用sort()方法裏面的參數——也就是排序函數的話,可能就比較難理解了。數組
而後我就總結出了一種直白易懂的理解方式:在每次循環中,函數裏ruturn的值,若是小於0,則a對應的那個對象排到前面,通過雙重循環後就實現了從小到大的排序;若是大於0,則a對應的那個對象排到後面去,通過雙重循環後就實現了從大到小的排序。函數
先看代碼:url
var arr = [{num: 5}, {num: 10}, {num: 6}, {num: 3}, {num: 4}, {num: 1}]; console.log(arr); arr.sort(function(a, b) { return Math.abs(a.num - 5) - Math.abs(b.num - 5); }); console.log(arr); //[{num: 5},{num: 6},{num: 4},{num: 3},{num: 1},{num: 10}]
這段代碼實現了讓數組裏的對象根據num屬性的值接近5的程度從小到大排序的效果。spa
return後面的這一段:.net
Math.abs(a.num - 5) - Math.abs(b.num - 5)
就是在比較先後兩個數據接近5的程度,若是a的數據更接近5,這個表達式的值就會小於0,而後a對應的對象就會排到前面,從而達到了從小到大排序的效果。code
若是把表達式改爲:htm
Math.abs(b.num - 5) - Math.abs(a.num - 5)
這時,若是a的數據更接近5,這個表達式的值就會大於0,而後a對應的對象就會排到後面,從而達到了從大到小排序的效果。對象
以上皆是我的理解,不免會有疏漏之處,如有錯誤之處歡迎指正。blog