JavaScript 的数组排序是一个非常常见业务场景

ECMAScript 为数组提供了一个原生的sort函数,今天我们就来好好看看你对sort函数究竟了解多少。

首先我们来看一下sort函数的基本信息

语法:
arr.sort([compareFunction])
参数:
compareFunction [可选]
用于数组排序规则的比较函数。如果不含有该参数,数组元素按照转换字符串的各个字符的Unicode编码顺序进行排序。compareFunction 参数:firstElement   用于比较的第一个元素secondElement  用于比较的第二个元素
返回值:
排序后的数组,返回的是当前数组。

我们先来看看各种排序的应用方式

没有参数的默认排序

// 当没有参数传入时 默认按照数组转成字符串后的结果每一位的Unicode编码进行排序
let arr = [311,43,54,4,40,26,31,33];
arr.sort();
console.log(arr); // [26, 31, 311, 33, 4, 40, 43, 54]

升序排列

let arr = [311,43,54,4,40,26,31,33];
arr.sort((a,b) => a - b);
console.log(arr);  // [4, 26, 31, 33, 40, 43, 54, 311]

降序排列

let arr = [311,43,54,4,40,26,31,33];
arr.sort((a,b) => b - a);
console.log(arr); // [311, 54, 43, 40, 33, 31, 26, 4]

好了,看完升序和降序排列以后我们来聊聊排序的规则。

如果添加了 compareFunction 那么数组会按该函数的返回值结果进行排序。

compareFunction(a,b) 表示 a,b的比较结果,规则如下:

  • 如果返回值结果小于0,则a和b的顺序不变;
  • 如果返回值结果等于0,则a和b的顺序不变;
  • 如果返回值的结果大于0,a和b会交换位置。

了解了以上排序结果以后我们可以使用sort方法颠倒数组的顺序(实现类似于reverse方法的效果)

let arr = [311,43,54,4,40,26,31,33];
arr.sort(() => -1);
console.log(arr); // [33, 31, 26, 40, 4, 54, 43, 311]

随机排序

let arr = [311,43,54,4,40,26,31,33];
arr.sort((a,b) => Math.random() - 0.5);
console.log(arr); // 结果为随机排序

按照对象指定的属性值进行升序或降序排列

var arr = [{name: 'zhangsan',age: 20
}, {name: 'lisi',age: 15
}, {name: 'wangwu',age: 17
}, {name: 'zhaoliu',age: 23
}, {name: 'fengqi',age: 31
}, {name: 'xiaoming',age: 11
}];function sortby(prop, rev = true) {// prop 属性名// rev  升序降序 默认升序return function(a, b) {var val1 = a[prop]; var val2 = b[prop]; return rev ? val1 - val2 : val2 - val1;}
}arr.sort(sortby('age')); // 根据age进行升序排列
arr.sort(sortby('age',false)); // 根据age进行降序排列

升序排列结果 :

降序排列结果 :

我们再来看看特别的排序方式

先按奇数升序排列,后按偶数升序排列

let arr = [311,43,54,4,40,26,31,33];
arr.sort((a,b)=>{if(!(a % 2) && b % 2) return 1; // 首先满足条件a为偶数,b为奇数if((a % 2 && b % 2 || !(a % 2) && !(b % 2)) && a > b) return 1; // 判断a b 均为奇数或偶数 且a > b 即可进行升序排序return -1;
});
console.log(arr); // [31, 33, 43, 311, 4, 26, 40, 54]

千锋HTML5学院:如何讲清楚函数防抖?​zhuanlan.zhihu.com

千锋HTML5学院:如何讲清楚函数节流?​zhuanlan.zhihu.com

千锋HTML5学院:如何讲清楚闭包?​zhuanlan.zhihu.com

c#sort升序还是降序_被玩坏的数组排序之sort函数相关推荐

  1. java列表排序sort_java list(java list排序sort升序、降序)

    javalist List是Java中比较常用的调集类,关于List接口有许多完成类,本文就来简略介绍下其间几个重点的完成ArrayList.LinkedList和Vector之间的联系和差异. Li ...

  2. c#sort升序还是降序_Linux排序命令sort笔记

    很多时候Linux需要对文本相对比较规范的文本数据进行排序,这时候可以使用Linux系统下的sort命令进行处理. 语法格式:sort [-ntkr] filename 常用参数: -n 根据数字进行 ...

  3. c#sort升序还是降序_C#中对数组或集合进行升序或降序排序

    在.net framework中,数组和集合都实现了用于排序的方法sort(),数组通过调用Array.Sort(数组名)排序,集合通过调用 集合对象.Sort()方法排序. 默认的排序是使用升序排列 ...

  4. Matlab进行升序降序,matlab sort()升序和降序

    B = sort(A) %沿着输入参量 A的不同维的方向.从小到大重新排列 A中的元素.A 可以是字符串的.实数的.复数的单元数组.对于 A 中完全相同的元素,则按它们在 A 中的先后位置排列在一块: ...

  5. Collections.sort升序和降序

    如果是对List<Integer> 或者 List<String> 这样本身就实现了Comparable接口的泛型集合排序. 如果使用Collections.sort(List ...

  6. matlab sort descend,matlab sort()升序和降序

    B = sort(A) %沿着输入参量 A的不同维的方向.从小到大重新排列 A中的元素.A 可以是字符串的.实数的.复数的单元数组.对于 A 中完全相同的元素,则按它们在 A 中的先后位置排列在一块: ...

  7. c#sort升序还是降序_c# List的sort排序方法详解

    诸如List&ltT&gt等泛型集合类,直接提供了sort()方法用于将集合中的元素进行排序. 但是,其前提是集合中存放的是可直接排序的基本类型,如List&ltint& ...

  8. java comparator 降序排序_【转】java comparator 升序、降序、倒序从源码角度理解

    原文链接:https://blog.csdn.net/u013066244/article/details/78997869 环境 jdk:1.7+ 前言 之前我写过关于comparator的理解,但 ...

  9. python中对数字降序和升序_该程序查找在Python中按升序或降序排列数字的最低成本...

    假设我们有一个称为nums的数字列表,我们必须找到最小成本以任何顺序(升序或降序)对列表进行排序.此处的成本是任何元素的旧值和新值之间的差总和. 因此,如果输入类似于[2,5,4],则输出将为2. 为 ...

最新文章

  1. [WinError 17] 系统无法将文件移到不同的磁盘驱动器
  2. 实验一 Part 1 开发环境的配置运行
  3. apache 二级域名设置
  4. (转帖)开源容器集群管理系统Kubernetes架构及组件介绍
  5. 容器和云服务器集群,什么是docker集群与镜像
  6. centos安装python3.6_Centos安装python3.6和pip步骤记录
  7. Payload与form表单提交区别
  8. Fiddler代理配置
  9. 今年又互联网寒冬了!
  10. [AGC006F]Blackout
  11. canvas压缩图片方法
  12. 关于BOM表的一些事
  13. 【Photoshop】Photoshop 64Bit与Camera Raw安装包
  14. iApp免费后台:云A后台
  15. java学习笔记(10) 第10 章(上) - 面向对象编程(高级部分)
  16. 全智通A+常见问题汇总解答—A+配件仓库—维修领料—编辑领料单:最后一个仓库无法显示
  17. 数学史思维导图_8张思维导图揭示:数学应该如何学,才能逆袭为学霸?
  18. android改微信号码,安卓版微信更新,已支持修改微信号
  19. JSP项目常见问题解决方案
  20. 在chromium内不能激活fcitx输入法

热门文章

  1. ubuntu截图软件deepin scrot
  2. 第十一章 串 (b2)蛮力匹配
  3. 【BZOJ 1266】 [AHOI2006]上学路线route
  4. java中文字符读写
  5. css--css选择器,伪类
  6. windows下python虚拟环境virtualenv安装和使用
  7. SNMP学习笔记之SNMPv3的配置和认证以及TroubleShooting
  8. 2018-2019-1 20165202 《信息安全系统设计基础》第四周学习总结
  9. 获取的输入内容,没有被P标签包裹的文本和元素进行处理
  10. php ci框架中载入css和js文件失败的原因及解决方法