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);

初始化的数组:

排序后的结果:

所以遇到多条件排序的需求时,先一级一级进行划分,最后再根据某个条件进行排序。

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 ? - : ;
}
//mes都 等于 0
else if(!a.mes && !b.mes){
return a.id < b.id ? - : ;
}
//mes 不同时为 0
else{
return a.mes > b.mes ? - : ;
}
}
//online 都为false
else if(!a.online && !b.online){
if(a.mes && b.mes){
return a.id < b.id ? - : ;
}
else if(!a.mes && !b.mes){
return a.id < b.id ? - : ;
}
else{
return a.mes > b.mes ? - : ;
}
}
//online 不同时为true
else{
return a.online > b.online ? - : ;
}
}
var arr = [];
for(var i = ; i < ; i++){
var id = parseInt(Math.random() * );
var mes = parseInt(Math.random() * );
if(id > ){
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, 多条件排序。的更多相关文章

  1. js数组sort排序方法的算法

    说明一下,ECMAScript没有定义使用哪种排序算法,各个浏览器的实现方式会有不同.火狐中使用的是归并排序,下面是Chrome的sort排序算法的实现. sort方法源码 DEFINE_METHOD ...

  2. js数组sort()排序的问题

    最近跟自以为很了解的数组干上了,就像许多我们认知的东西一样,总以为自己很了解的东西,其实并不了解. var a=[12,4,1,43,5,3,52];  alert(a);   //源:12,4,1, ...

  3. JS数组sort比较函数

    转载:http://www.cnblogs.com/ljchow/archive/2010/06/30/1768683.html 我们知道,数组的sort方法可以对数组元素进行排序,默认是按ASCII ...

  4. JS数组Sort方法的使用

    想用sort方法对数组排下序,代码如下: var nums = "12 645 6 85 81 0 9 365 4 752".split(" ").map(fu ...

  5. js数组sort方法详解

    在处理数组的时候,我们有时候需要对数组进行排序,排序的方法有很多种,但是最好最快的就是利用sort方法进行快速的排序. 我们来看一个例子: var arr1 = [6, 3, 4, 1, 2, 5, ...

  6. Js中的多条件排序,多列排序

    參见github: https://github.com/Teun/thenBy.js

  7. js数组sort方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. js运用sort对json 数组进行排序

    Array.sort()方法是用来对数组项进行排序的 ,默认情况下是进行升序排列.sort() 方法可以接受一个 方法为参数. sort()排序时每次比较两个数组项都回执行这个参数,并把两个比较的数组 ...

  9. JS数组的sort排序

    数组sort方法排序var aa=[6,2,1,5]//默认是从小到大排序aa.sort()[1, 2, 5, 6] //下面也是从小到大排序aa.sort(function(a,b){return ...

随机推荐

  1. <Android Studio> 3.打包APK

    我的IDE版本是 3.5 我希望输出的apk文件格式是: 名称_v版本_release/debug_日期 时间.apk 步骤: 1.打开build.gradle 末尾添加如下代码 def releas ...

  2. MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?

    本文阅读时间大约3分钟. 梁桂钊 | 作者 今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢 ...

  3. 06. redis cluster

    目录 Redis Cluster redis cluster 特点 搭建redis cluster 访问redis cluster redis-cli 访问redis cluster 重新分片数据 新 ...

  4. Linux高级运维 第八章 部署docker容器虚拟化平台

    8.1  Docker概述 实验环境: CENTOS7.4-63 64位 Dcoker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到 ...

  5. CentOS6.7编译安装mysql5.6

    可能因为有各种情况,无法通过yum安装mysql,这里记录一下编译安装的简单步骤 使用yum安装一些依赖 yum -y install make gcc-c++ cmake bison-devel  ...

  6. vue - 基础(3)

    1.数据的双向绑定 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  7. 第三章 linux常用的命令

    安装笔记: 1 安装linux操作系统时,会默认创建一个超级管理员帐号:root 2 安装时,当进行到选择哪种类型的安装时,我们选择"使用所有空间"的类型 Linux概念性的东西 ...

  8. 访问阿里云 vue项目的 127.0.0.1:+ip

    vue 127.0.0.1 将  localhost 改为 0.0.0.0 原理看下面链接 参考: https://www.cnblogs.com/sddai/p/9281189.html

  9. nodemcu固件的烧录及lua开发

    一.板子介绍 NodeMCU 1.0/ESP 8266 12E 该模块是安信可公司生产的,并且提供全部开发资料. 对该模块的开发有两种方式: 一种是基于乐鑫官方推出的SDK开发包在 安信可ESP的一体 ...

  10. 全面分析:APP中的消息功能设计

    一.定义 APP的“消息”模块,是通过APP或手机这个客户端,围绕某个产品的功能进行交流.沟通的重要方式.这种沟通,一方是运营人员或商家,也可以是产品或系统本身,为方便说明笔者这里姑且统一简称为B端, ...