sort 函数

博客地址:https://ainyi.com/41

简单的说,sort() 在没有参数时,返回的结果是按升序来排列的。即字符串的Unicode码位点(code point)排序
  1. [5, 2, 4, 1, 3].sort();
  2. // [1, 2, 3, 4, 5]
  3.  
  4. // 数字字符串也是从小到大
  5. ['5', '2', '4', '1', '3'].sort();
  6. // ['1', '2', '3', '4', '5']
如果指明了参数:compare(a, b) ,(a, b 是两个要比较的元素,a 在 b 前面)那么数组会按照该函数的返回值排序
- 如果 compare(a, b) 返回值 < 0 ,a 会被排列到 b 之前,即参数a, b的顺序保存原样;
- 如果 compare(a, b) 返回值 = 0 ,a 和 b 的相对位置不变。(ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守)
- 如果 compare(a, b) 返回值 > 0 ,b 会被排列到 a 之前。即交换参数a, b的顺序
> 记:大于 0 交换顺序
 
 

题目

有如下数据:

  1. [
  2. {"name":"张三","class":2,"score":64},
  3. {"name":"李四","class":1,"score":80},
  4. {"name":"王五","class":1,"score":90},
  5. {"name":"赵六","class":4,"score":94}
  6. ]
 
实现:
* 按照 class 从小到大排列
* 如果 class 相同,则按照 score 从大到小排列
* 如果 class 和 score 都相同,则按照原顺序排列
  1. function compare(name1, name2) {
  2. // 这里的参数 a, b 是比较的第一个元素 a,第二个元素 b
  3. return function (a, b) {
  4. let fir1 = a[name1];
  5. let sec1 = b[name1];
  6. if (fir1 === sec1) {
  7. let fir2 = a[name2];
  8. let sec2 = b[name2];
  9. if (fir2 === sec2) {
  10. return 0; // 表示位置不变
  11. } else {
  12. return fir2 > sec2 ? -1 : 1; // 表示从大到小排序
  13. }
  14. } else {
  15. return fir1 > sec1 ? 1 : -1; // 表示从小到大排序
  16. }
  17. }
  18. }
  19.  
  20. function sortStudents(students) {
  21. return students.sort(compare('class', 'score'));
  22. }
  23.  
  24. let _students = JSON.parse(`[
  25. {"name":"张三","class":2,"score":64},
  26. {"name":"李四","class":1,"score":80},
  27. {"name":"王五","class":1,"score":90},
  28. {"name":"赵六","class":4,"score":94}]`);
  29.  
  30. let res = sortStudents(_students);
  31. console.log(res);

效果如下:

博客地址:https://ainyi.com/41

javascript sort 函数用法的更多相关文章

  1. Perl Sort函数用法总结和使用实例

    一) sort函数用法 sort LISTsort BLOCK LISTsort SUBNAME LIST sort的用法有如上3种形式.它对LIST进行排序,并返回排序后的列表.假如忽略了SUBNA ...

  2. C++ sort函数用法

    参考文档:http://hi.baidu.com/posinfo/item/dc3e73584c535cc9d2e10c27 C++ sort函数用法 FROM:http://hi.baidu.com ...

  3. 1806最大数 string和sort函数用法

    1.C++自带sort函数用法 sort函数有三个参数: (1)第一个是要排序的数组的起始地址 (2)第二个是结束的地址(最后一位要排序的地址) (3)第三个参数是排序的方法,可以是从大到小也可是从小 ...

  4. sort函数用法

    原文链接:http://blog.csdn.net/csust_acm/article/details/7326418 sort函数的用法 做ACM题的时候,排序是一种经常要用到的操作.如果每次都自己 ...

  5. C++ sort函数用法 C中的qsort

    需要包含#include <algorithm>MSDN中的定义: template<class RanIt>     void sort(RanIt first, RanIt ...

  6. C++ sort 函数用法

    MSDN中的定义: template<class RanIt>void sort(RanIt first, RanIt last); //--> 1)template<clas ...

  7. sort函数用法详解

    用于C++中,对给定区间所有元素进行排序.头文件是#include <algorithm> sort函数进行快速排序,时间复杂度为n*log2n,比冒泡之类的要省时不少 Sort函数使用模 ...

  8. c/c++中sort函数用法

    转载自博主:九江镇中https://www.cnblogs.com/jjzzx/ c++标准库里的排序函数的使用方法 I)Sort函数包含在头文件为#include<algorithm>的 ...

  9. C++ STL sort()函数用法

    C++STL提供的在里的排序函数,有以下两种形式 此外还提供有稳定排序版本stable_sort(),用法类似. 第一种形式: template <class RandomAccessItera ...

随机推荐

  1. Spring源码Gradle

    Microsoft Windows [版本 10.0.17134.590](c) 2018 Microsoft Corporation.保留所有权利. D:\Workspaces\idea\sprin ...

  2. [转]XModem协议

    出处:XModem协议 XModem协议介绍:XModem是一种在串口通信中广泛使用的异步文件传输协议,分为XModem和1k-XModem协议两种,前者使用128字节的数据块,后者使用1024字节即 ...

  3. firewalld的基本使用

    参考原文链接:https://www.cnblogs.com/moxiaoan/p/5683743.html 1.firewalld的基本使用 启动: systemctl start firewall ...

  4. Java当中的IO三

    1.处理流的使用实例 bufferedReader(处理流)介绍: buffereReader属于字符流,其次也是处理流,也是输入流,即字符输入处理流 常用方法 readLine() Buffered ...

  5. 判断DataTale中判断某个字段中包含某个数据

    // <summary> /// 判断DataTale中判断某个字段中包含某个数据 /// </summary> /// <param name="dt&quo ...

  6. 报错Domain=NSCocoaErrorDomain Code=3840 "Garbage at end."

    网络请求出现报错:Domain=NSCocoaErrorDomain Code=3840 "Garbage at end." 出现的问题是后台返回了两次json数据!

  7. Mesos源码分析(2): Mesos Master的启动之一

    Mesos Master的启动参数如下: /usr/sbin/mesos-master --zk=zk://127.0.0.1:2181/mesos --port=5050 --log_dir=/va ...

  8. CASE WHEN 高阶用法?

    两个表做关联时,以左表为准,若左表某列不为空,则与右表对应列进行关联匹配,为空则不做匹配. 以上做法,有一种说不出来的感觉,不管怎样,问题是解决了. 如有更好的解决思路,请留言告知,不甚感激!

  9. 【安富莱二代示波器教程】第18章 附件C---波形拟合

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=45785 第18章      附件C---波形拟合 emWin5. ...

  10. 原来Java世界里也有这么多精彩的故事,学Java真有趣!

    大千世界,无所不有.这世上不光有人类世界,还有咱们的java世界.今天就由我这个实习导游带领你们了解了解咱们的java世界奇妙之处.   有一种暖男叫catch,有一种真爱叫try---catch,世 ...