js 数组sort, 多条件排序。
时间:2019-08-13
本文章向大家介绍js 数组sort, 多条件排序。,主要包括js 数组sort, 多条件排序。使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Array.sort();
sort()方法可以传入一个函数作为参数,然后依据该函数的逻辑,进行数组的排序。
一般用法:(数组元素从小大进行排序)
var a = [9, 6, 5, 7, 11, 52, 15]; a.sort(function(return a-b;));
sort()方法,接收了一个函数作为参数时,排序主要根据传入函数的返回值是否大于0进行排序。
1)当 a - b < 0 时, 则 a 元素排在 b 元素的前面。
2) 当 a - b = 0 时, a , b 元素的位置不变。
3) 当 a - b > 0 是, 则 b 元素排在 a 元素的前面。
----------------------------------------------------------------------------------------------------------------------
以上是针对单纯的整数数组,当数组的元素为对象时,则可能需要根据对象的属性进行排序,此时就会涉及到多条件排序。
var obj = {online: true, id: 123, mes: 3}; //online表示是否在线, id:玩家ID,mes:消息条数;
如数组中的元素是obj对象,此时需要根据, online, id, mes 三个维度对数组进行排序。
需求如下:online为true排前面, id 小的排前面,mes>0的排在前面
直接上代码:
1 function Obj(id, online, mes){ 2 this.id = id; 3 this.online = online; 4 this.mes = mes 5 } 6 7 function mysort(a ,b){ 8 //online 都为true 9 if(a.online && b.online){ 10 //mes都 大于 0 11 if(a.mes && b.mes){ 12 return a.id < b.id ? -1 : 1; 13 } 14 //mes都 等于 0 15 else if(!a.mes && !b.mes){ 16 return a.id < b.id ? -1 : 1; 17 } 18 //mes 不同时为 0 19 else{ 20 return a.mes > b.mes ? -1 : 1; 21 } 22 } 23 //online 都为false 24 else if(!a.online && !b.online){ 25 if(a.mes && b.mes){ 26 return a.id < b.id ? -1 : 1; 27 } 28 else if(!a.mes && !b.mes){ 29 return a.id < b.id ? -1 : 1; 30 } 31 else{ 32 return a.mes > b.mes ? -1 : 1; 33 } 34 } 35 //online 不同时为true 36 else{ 37 return a.online > b.online ? -1 : 1; 38 } 39 } 40 41 var arr = []; 42 for(var i = 0; i < 10; i++){ 43 var id = parseInt(Math.random() * 10); 44 var mes = parseInt(Math.random() * 10); 45 if(id > 5){ 46 var online = true; 47 } 48 else var online = false; 49 arr[i] = new Obj(id, online, mes); 50 } 51 console.table(arr); 52 arr.sort(mysort); 53 console.table(arr);
初始化的数组:
排序后的结果:
所以遇到多条件排序的需求时,先一级一级进行划分,最后再根据某个条件进行排序。
function Obj(id, online, mes){
this.id = id;
this.online = online;
this.mes = mes
}
function mysort(a ,b){
//online 都为true
if(a.online && b.online){
//mes都 大于 0
if(a.mes && b.mes){
return a.id < b.id ? -1 : 1;
}
//mes都 等于 0
else if(!a.mes && !b.mes){
return a.id < b.id ? -1 : 1;
}
//mes 不同时为 0
else{
return a.mes > b.mes ? -1 : 1;
}
}
//online 都为false
else if(!a.online && !b.online){
if(a.mes && b.mes){
return a.id < b.id ? -1 : 1;
}
else if(!a.mes && !b.mes){
return a.id < b.id ? -1 : 1;
}
else{
return a.mes > b.mes ? -1 : 1;
}
}
//online 不同时为true
else{
return a.online > b.online ? -1 : 1;
}
}
var arr = [];
for(var i = 0; i < 10; i++){
var id = parseInt(Math.random() * 10);
var mes = parseInt(Math.random() * 10);
if(id > 5){
var online = true;
}
else var online = false;
arr[i] = new Obj(id, online, mes);
}
console.table(arr);
arr.sort(mysort);
console.table(arr);
原文地址:https://www.cnblogs.com/lyc10/p/11348419.html
- C++课程设计类作业3
- [快学Python3]INI文件读写
- 【专知-PyTorch手把手深度学习教程08】NLP-PyTorch: 用字符级RNN生成名字
- Codeforces Round #415 (Div. 2)(A,暴力,B,贪心,排序)
- BZOJ 2456: mode(新生必做的水题)
- 【专知-PyTorch手把手深度学习教程07】NLP-基于字符级RNN的姓名分类
- Codeforces Round #301 (Div. 2)(A,【模拟】B,【贪心构造】C,【DFS】)
- 【专知-PyTorch手把手深度学习教程06】NLP-Word Embedding快速理解与PyTorch实现: 图文+代码
- [linux][memory]memcmp几种实现和性能对比
- 蒙特卡洛算法及其实现
- 【专知-PyTorch手把手深度学习教程05】Dropout快速理解与PyTorch实现: 图文+代码
- 【专知-PyTorch手把手深度学习教程04】GAN快速理解与PyTorch实现: 图文+代码
- 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)
- 【专知中秋呈献-PyTorch手把手深度学习教程03】LSTM快速理解与PyTorch实现: 图文+代码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- jquery param 数据 数组参数序列化
- 3 CPU缓存一致性协议MESi
- 4. synchronized详解
- 4.2 synchronized补充
- 解决 Maven 使用Tomcat 部署报错 Tomcat return http status error: 405, Reason Phrase: Method Not Allowed:
- spring5源码 -- IOC容器设计理念和核心注解的作用
- 1. spring5源码 -- Spring整体脉络 IOC加载过程 Bean的生命周期
- Cookie详解
- 2.1 Spring5源码--源码编译
- WebLogic 10 容器通过JNDI切换数据源
- 2.2 spring5源码 -- ioc加载的整体流程
- Js 删除 指定Domin 指定 path 下的 cookie中指定的内容
- 适配器模式与装饰器模式的区别
- java堆内存详解
- springBoot 入门(一)—— 使用idea创建第一个springBoot项目