比较常见的解释可以看这里: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对应的对象就会排到后面,从而达到了从大到小排序的效果。

以上皆是个人理解,难免会有疏漏之处,若有错误之处欢迎指正。

(JavaScript基础向)sort()方法里的排序函数的理解的更多相关文章

  1. JS基础篇--sort()方法的用法,参数以及排序原理

    JS基础篇--sort()方法的用法,参数以及排序原理   sort() 方法用于对数组的元素进行排序,并返回数组.默认排序顺序是根据字符串Unicode码点.语法:arrayObject.sort( ...

  2. JavaScript 基础(六) 数组方法 闭包

    在一个对象中绑定函数,称为这个对象的方法.在JavaScript 中,对象的定义是这样的: var guagua = { name:'瓜瓜', birth:1990 }; 但是,如果我们给瓜瓜绑定一个 ...

  3. 定制对ArrayList的sort方法的自定义排序

    java中的ArrayList需要通过collections类的sort方法来进行排序 如果想自定义排序方式则需要有类来实现Comparator接口并重写compare方法 调用sort方法时将Arr ...

  4. 用Java集合中的Collections.sort方法对list排序的两种方法

    用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  5. JavaScript 中数组 sort() 方法的基本使用

    在日常的代码开发中,关于数组排序的操作可不少,JavaScript 中可以调用 sort 方法对数组进行快速排序. 今天,就数组的 sort 方法来学习一下,避免日后踩坑的悲惨遭遇. 概念 sort ...

  6. java中Collections.sort()方法实现集合排序

    1.Integer/String泛型的List进行排序 List <Integer> integerlist = new ArrayList<Integer>();   //定 ...

  7. Javascript Array对象 sort()方法,记忆方法,方法扩展

    相信 有很多 同仁们,尤其是初学者,在记住 Array对象 sort() 方法的排序,规则上,有点困难: 其实sort()方法已经在实际工作中用到很多遍了,可当我仔细推敲,这个sort()方法,什么时 ...

  8. 你真的会用JavaScript中的sort方法吗

      在平时的业务开发中,数组(Array) 是我们经常用到的数据类型,那么对数组的排序也很常见,除去使用循环遍历数组的方法来排列数据,使用JS数组中原生的方法 sort 来排列(没错,比较崇尚JS原生 ...

  9. JavaScript Array对象sort() 方法小结

    sort() 方法用于对数组的元素进行排序. 语法arrayObject.sort(sortfunction) 参数sortfunction 可选.规定排序顺序.必须是函数. 返回值对数组的引用.请注 ...

随机推荐

  1. 【Linux下安装使用virtualenv与virtualenvwrapper】

    virtualenv virtualenv是一个可以帮助我们管理不同Python环境的绝好工具. virtualenv是一个可以在系统中建立多个不同且相互不干扰的虚拟环境. 下面的步骤将创建两个独立的 ...

  2. Linux下使用fstatfs/statfs查询系统相关信息

    Linux下使用fstatfs/statfs查询系统相关信息 1.   功能 #include < sys/statfs.h > int statfs(const char *path, ...

  3. OCP-1Z0-051-题目解析-第26题

    26. Which is the valid CREATE TABLE statement? A. CREATE TABLE  emp9$#  (emp_no NUMBER (4));  B. CRE ...

  4. matlab中tic和toc使用方法

    tic和toc用来记录matlab命令运行的时间.  tic用来保存当前时间,而后使用toc来记录程序完毕时间. 两者往往结合使用,使用方法例如以下: 程序代码: tic  operations  t ...

  5. [Java开发之路](9)对象序列化与反序列化

    1. 对象序列化 当你创建对象时.仅仅要你须要.它会一直存在,可是程序终止时,不管何时它都不会继续存在.虽然这样做是很有意义的,可是在某些情况下.假设程序不执行时扔能存在而且保存其信息,那将对我们很实 ...

  6. HDU 2886 Lou 1 Zhuang

    思维好重要.. 对于n+m == k , 当n == m || abs(n-m) == 1 时n*m取得最大值. 设 s = x*(l-x),s = lx-x^2.其导函数为 s' = -1/2x + ...

  7. strongSwan IKEv2服务器配置

    strongSwan IKEv2服务器配置 资料来源 https://www.cl.cam.ac.uk/~mas90/resources/strongswan/ 经过大量的反复试验,我配置了一个str ...

  8. LinkCutTree详解

    LCT详解 没有比这再详细的了, 相信我

  9. Day2上午解题报告

    预计分数:100+0+60=160 实际分数:100+0+60=160 mmpT1数据错了... T1遭遇 题目描述 你是能看到第一题的 friends呢. —— hja ?座楼房,立于城中 . 第? ...

  10. IBM Tivoli Netview在企业网络管理中的实践(附视频)

    今天我为大家介绍的一款高端网管软件名叫IBM Tivoli NetView,他主要关注是IBM整理解决方案的用户,分为Unix平台和Windwos平台两种,这里视频演示的是基于Windows 2003 ...