(JavaScript基础向)sort()方法里的排序函数的理解
比较常见的解释可以看这里:js的sort()方法,这篇博客写得挺好的,一般的应用的理解已经足够了。
但是如果要活用sort()方法里面的参数——也就是排序函数的话,可能就比较难理解了。
然后我就总结出了一种直白易懂的理解方式:在每次循环中,函数里ruturn的值,如果小于0,则a对应的那个对象排到前面,经过双重循环后就实现了从小到大的排序;如果大于0,则a对应的那个对象排到后面去,经过双重循环后就实现了从大到小的排序。
先看代码:
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的程度从小到大排序的效果。
return后面的这一段:
Math.abs(a.num - 5) - Math.abs(b.num - 5)
就是在比较前后两个数据接近5的程度,如果a的数据更接近5,这个表达式的值就会小于0,然后a对应的对象就会排到前面,从而达到了从小到大排序的效果。
如果把表达式改成:
Math.abs(b.num - 5) - Math.abs(a.num - 5)
这时,如果a的数据更接近5,这个表达式的值就会大于0,然后a对应的对象就会排到后面,从而达到了从大到小排序的效果。
以上皆是个人理解,难免会有疏漏之处,若有错误之处欢迎指正。