网站首页 > 教程分享 正文
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]
猜你喜欢
- 2024-10-11 Java中Arrays的两种排序方法(sort和parallelSort)比较
- 2024-10-11 Excel中的排序函数RANK,这6种使用技巧你一定不能错过
- 2024-10-11 七种排序算法 冒泡,选择,插入,希尔,快速,归并,堆
- 2024-10-11 深入浅出Redis:Redis的排序命令Sort
- 2024-10-11 「收藏」JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
- 2024-10-11 R语言sort和order排序函数(r语言给数据排序)
- 2024-10-11 vba如何通过调用sort方法实现排序?跟着文章解开心中的谜题!
- 2024-10-11 用SORTBY函数进行多条件排序 #excel技巧
- 2024-10-11 python数据排序-sorted与sort(python中的sorted排序)
- 2024-10-11 Linux基础知识之sort排序查看硬盘SN
你 发表评论:
欢迎- 最近发表
-
- 有了这份900多页的Android面试指南,你离大厂Offer还远吗?
- K2 Blackpearl 流程平台总体功能介绍:常规流程功能
- 零基础安卓开发起步(一)(安卓开发入门视频)
- 教程:让你的安卓像Windows一样实现程序窗口化运行
- Android事件总线还能怎么玩?(事件总线有什么好处)
- Android 面试被问“谈谈架构”,到底要怎样回答才好?
- Android开发工具Parcel和Serialize
- Android 中Notification的运用(notification widget安卓)
- Android退出所有Activity最优雅的方式
- MT管理器-简单实战-去除启动页(mt管理器怎么去除软件弹窗)
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)