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的排在前面
直接上代码:
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);
初始化的数组:
排序后的结果:
所以遇到多条件排序的需求时,先一级一级进行划分,最后再根据某个条件进行排序。
js 数组sort, 多条件排序。的更多相关文章
- js数组sort排序方法的算法
说明一下,ECMAScript没有定义使用哪种排序算法,各个浏览器的实现方式会有不同.火狐中使用的是归并排序,下面是Chrome的sort排序算法的实现. sort方法源码 DEFINE_METHOD ...
- js数组sort()排序的问题
最近跟自以为很了解的数组干上了,就像许多我们认知的东西一样,总以为自己很了解的东西,其实并不了解. var a=[12,4,1,43,5,3,52]; alert(a); //源:12,4,1, ...
- JS数组sort比较函数
转载:http://www.cnblogs.com/ljchow/archive/2010/06/30/1768683.html 我们知道,数组的sort方法可以对数组元素进行排序,默认是按ASCII ...
- JS数组Sort方法的使用
想用sort方法对数组排下序,代码如下: var nums = "12 645 6 85 81 0 9 365 4 752".split(" ").map(fu ...
- js数组sort方法详解
在处理数组的时候,我们有时候需要对数组进行排序,排序的方法有很多种,但是最好最快的就是利用sort方法进行快速的排序. 我们来看一个例子: var arr1 = [6, 3, 4, 1, 2, 5, ...
- Js中的多条件排序,多列排序
參见github: https://github.com/Teun/thenBy.js
- js数组sort方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js运用sort对json 数组进行排序
Array.sort()方法是用来对数组项进行排序的 ,默认情况下是进行升序排列.sort() 方法可以接受一个 方法为参数. sort()排序时每次比较两个数组项都回执行这个参数,并把两个比较的数组 ...
- JS数组的sort排序
数组sort方法排序var aa=[6,2,1,5]//默认是从小到大排序aa.sort()[1, 2, 5, 6] //下面也是从小到大排序aa.sort(function(a,b){return ...
随机推荐
- 基于wince系统开发的 SQLServe Mobile数据库应用
SQLServe Mobile数据库以前的版本是SQLServe CE,现在最新的是3.5的版本,最近用vs2008做了一个小程序,是对SQLServe Mobile数据库读写数据. 注:SQLSer ...
- Ninja使用Visual Studio(cl.exe)构建
目录 Ninja基本步骤 Ninja在VS2015下的问题和解决 Ninja命令行参数 Ninja错误的调用了gcc Ninja基本步骤 Ninja的作用是加速构建,最初目的是替代make,现在Win ...
- Fork/Join框架与Java8 Stream API 之并行流的速度比较
Fork/Join 框架有特定的ExecutorService和线程池构成.ExecutorService可以运行任务,并且这个任务会被分解成较小的任务,它们从线程池中被fork(被不同的线程执行)出 ...
- 安装Ubuntu后需要做的事
卸载软件 纸牌 麻将 扫雷 数独 火狐 邮件 扫描 拍照 照片 视频 计划 日历 打印 备份 计算器 亚马逊 电源统计 音乐播放 远程桌面 To Do LibreOffice 换下载源 装机的时候下载 ...
- tensorflow运行时错误:服务似乎挂掉了,但是会立刻重启的.
以前在POD里跑起来,没问题的示例代码. 移到jupyter中,多给两个GPU,有时运行就会爆出这个错误: 于是,按网上的意见,暂时加了个使用GPU的指定, 暂时搞定. 如下红色部分. import ...
- django cookie,session,auth
一.最完美的auth auth_user 是用来存储的用户注册的username,password auth 首先需要引入模块 from django.contrib import auth 用户认证 ...
- dgango
一 mvc与mtv模型 web服务器开发领域里著名的mvc模式,所谓mvc就是把web应用分为模型(M),控制器(C),视图(V),以插件的形式,松耦合的方式连接在一起,模型负责业务对象与数据库的映射 ...
- Python基础之内置方法
目录 字符串的内置方法 按索引取值 切片(顾头不顾尾,步长) 长度len 成员运算 移除两边空白strip 切分split 循环 lower&upper startswith & en ...
- Git挽回错误的push(commit)
若你的(zhu)队友不小心把错误的代码提交到远程仓库,特别是包含了很多删除文件指令,不要尝试使用Git的API修改,或者删除Git仓库里的某次提交记录,风险十分大,正确的做法是备份你的本地源码,然后拉 ...
- BST | 1064 完全二叉搜索树
OJ:https://www.patest.cn/contests/pat-a-practise/1064 (一)23分(3个case未过)代码 建树的规律是我瞎猜的.首先用样例数据分析. 对数据排序 ...