比较常见的解释能够看这里: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