数组多重筛选条件排序方法
根据一个或者多个属性对数组进行排序,支持嵌套的属性。而且可以在每个条件中指定排序的方向,并支持传入比较函数。
安装
采用 npm 安装:
$ npm install --save arr-sort
复制代码
采用 yarn 安装:
$ yarn add arr-sort
复制代码
用法
通过给定的对象属性进行排序:
var arrSort = require('arr-sort');arrSort([{foo: 'y'}, {foo: 'z'}, {foo: 'x'}],[{attr:'foo'}]);
//=> [{foo: 'x'}, {foo: 'y'}, {foo: 'z'}]
复制代码
逆向排序
arrSort([{foo: 'y'}, {foo: 'z'}, {foo: 'x'}],[{attr:'foo', asc: false}]);
//=> [{foo: 'z'}, {foo: 'y'}, {foo: 'x'}]
复制代码
参数
arrSort(array, comparisonArgs);
复制代码
array
: { Object Array } 待排序的数组comparisonArgs
: { Object Array } 一个或者多个对象组成的数组。 结构如下:{ 'attr':attr
, 'asc':asc
}attr
: { String } 对象属性asc
: { Boolean | Function } 指定排序的方向true
: 升序(默认值)false
: 降序function
: 传入的比较函数
注意
- 如何没有提供
attr
属性, 则这次的排序会自动跳过 attr
属性值类型可以是 string 或者 number- 如果是 string, 我们采用
localeCompare
去比较排序 - 如果是 number, 我们直接比较值的大小
- 如果是 string, 我们采用
- 如果提供的比较函数没有返回值,则这次的排序会自动跳过
例子
1. 多重条件排序
var arrSort = require('arr-sort');var array = [{ foo: 'bbb', num: 4, flag: 2 },{ foo: 'aaa', num: 3, flag: 1 },{ foo: 'ccc', num: -6, flag: 2 },{ foo: 'ccc', num: 8, flag: 2 },{ foo: 'bbb', num: 2, flag: 4 },{ foo: 'aaa', num: -3, flag: 4 }
];// sort by `flag`, then `foo`, then `num`
var result = arrSort(array,[{attr: 'flag',asc: true},{attr: 'foo',asc: false},{attr: 'num',asc: true}]
);console.log(result);
// [ { foo: 'aaa', num: 3, flag: 1},
// { foo: 'ccc', num: -6, flag: 2},
// { foo: 'ccc', num: 8, flag: 2},
// { foo: 'bbb', num: 4, flag: 2},
// { foo: 'bbb', num: 2, flag: 4},
// { foo: 'aaa', num: -3, flag: 4} ]
复制代码
2. 嵌套的属性排序
var arrSort = require('arr-sort');var array = [{ locals: { foo: 'bbb', num: 4 }, flag: 2},{ locals: { foo: 'aaa', num: 3 }, flag: 1},{ locals: { foo: 'ccc', num: -6 }, flag: 2},{ locals: { foo: 'ccc', num: 8 }, flag: 2},{ locals: { foo: 'bbb', num: 2 }, flag: 4},{ locals: { foo: 'aaa', num: -3 }, flag: 4},
];// sort by `flag`, then `locals.foo`, then `locals.num`
var result = arrSort(array,[{attr: 'flag',asc: true},{attr: 'locals.foo',asc: false},{attr: 'locals.num',asc: true}]
);console.log(result);
// [ { locals: { foo: 'aaa', num: 3 }, flag: 1},
// { locals: { foo: 'ccc', num: -6 }, flag: 2},
// { locals: { foo: 'ccc', num: 8 }, flag: 2},
// { locals: { foo: 'bbb', num: 4 }, flag: 2},
// { locals: { foo: 'bbb', num: 2 }, flag: 4},
// { locals: { foo: 'aaa', num: -3 }, flag: 4} ]
复制代码
3. 传入比较函数排序
如果提供了比较函数,数组会根据其返回值排序。比较函数具体可以参考docs
var arrSort = require('arr-sort');var array = [{ locals: { foo: 'bbb', num: 4 }, flag: -2},{ locals: { foo: 'aaa', num: 3 }, flag: 1},{ locals: { foo: 'ccc', num: -6 }, flag: 2},{ locals: { foo: 'ccc', num: 8 }, flag: 2},{ locals: { foo: 'bbb', num: 2 }, flag: 4},{ locals: { foo: 'aaa', num: -3 }, flag: 4},
];// sort by `flag`, then `locals.foo`, then `locals.num`
var result = arrSort(array,[{attr: 'flag',asc: function(a,b){return (Math.abs(a) - Math.abs(b))}},{attr: 'locals.foo',asc: false},{attr: 'locals.num',asc: true}]
);console.log(result);
// [ { locals: { foo: 'aaa', num: 3 }, flag: 1},
// { locals: { foo: 'ccc', num: -6 }, flag: 2},
// { locals: { foo: 'ccc', num: 8 }, flag: 2},
// { locals: { foo: 'bbb', num: 4 }, flag: -2},
// { locals: { foo: 'bbb', num: 2 }, flag: 4},
// { locals: { foo: 'aaa', num: -3 }, flag: 4} ]
复制代码
关于
相关项目
- arr-del: 一次性删除数组指定index的元素 | homepage
集成测试
跑集成测试是一个非常好的熟悉一个项目及其API的方法。你可以通过以下命令安装依赖并跑测试:
$ npm install && npm test
复制代码
作者
tywei90
- github/tywei90
- blog/tywei90
许可证
Copyright © 2018, tywei90. Released under the MIT License.
数组多重筛选条件排序方法相关推荐
- java 数组排序论文_Java中运用数组的四种排序方法
标签: <1>利用Arrays带有的排序方法快速排序 import java.util.Arrays; 2 public class Test2{ public static void m ...
- JAVA中运用数组的四种排序方法
JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法. 快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现. 冒泡法是运用遍历数组进 ...
- 数组的四种排序方法介绍
最近在学习和练习一些算法方面的知识,发现在java中运用数组进行排序一般就四种方法:快速排序法.冒泡法.选择排序法.插入排序法.我们只要掌握这四种排序方法,基本上就能解决所有的排序问题.所以我接下来就 ...
- MyBatisPlus条件构造器带条件排序方法orderBy、orderByDesc、orderByAsc使用
场景 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/37194 基础搭建: https://blog.csdn.net/B ...
- PHP中数组的三种排序方法
一.冒泡排序法 说明:找到最大的数,排列到最后面,然后继续找 例: $arr = array(3,5,-1,0,2); for($i=0;$i<count($arr)-1;$i++){ for( ...
- Java中运用数组的四种排序方法_JAVA中运用数组的四种排序方法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 快速排序 public class TestMain { public static void main(String[] args) { Integer ...
- Java数组传参sql_Java中如何传一个数组作为筛选条件操作数据库(sql中foreach的使用)...
实现步骤: 1. 把前端获取到的要删除的数据的nId,以逗号作为分隔符,组成一个da(其中checkStatus.data.length和checkStatus.data[i].nId是layui里面 ...
- Django 实现搜索结果分页(筛选结果分页),以及优雅添加多个筛选条件
本人另外有一篇文档是专门更新Django的一些操作笔记,有需要可以收藏关注一下:Django笔记 目录 具体实现如下: 效果展示 分页器参考:Django高级之-分页器 场景:在对查询列表进行搜索.排 ...
- Excel2016中如何取消设置的筛选条件
在一张大型复杂的Excel表格中,可以通过强大的筛选功能迅速找出符合条件的数据,而其他不满足条件的数据,Excel工作表会自动将其隐藏. 在设置了数据筛选后,如果想还原到原始数据表中,需要取消设置的筛 ...
最新文章
- 设计模式之单例模式(Singleton)摘录
- SAP MM 物料主数据里的‘Packaging Material Type‘字段
- android案例一 电话拨号器
- 【Python教程】七种创建对象的方式,你知道几种?
- Python有了concurrent的话mutiprocessing和threading还有存在的意义吗?
- wget命令---Linux学习笔记
- 没错,继事理图谱后,我们又搞事情了:数地工场自然语言处理语义开放平台正式对外发布!
- python输出jpg_利用python实现.dcm格式图像转为.jpg格式
- html span标签 不换行(有时span带中文时候是可以自动换行的)
- 【C语言】数学也没辣么难嘛
- 势头强劲的 Python PK 强大的 C++,究竟谁更胜一筹?
- 如何用PyTorch训练图像分类器
- 新书预告<******笔记>快赏
- C语言printf语法
- 个人博客升级改造ing
- Android Canvas.DrawLine绘制线段
- Xenu Link Sleuth
- 【机器学习基础】EM算法
- 仙剑奇侠传编年史(转自网络)
- oracle里update+where,Oracle 关联表更新 update ,where exists
热门文章
- 转:PHP程序里的敏感信息处理方法
- Zend Framework 开发记录 - 代码片段–jquery–select控件
- ipv6 neutron应用(一)
- 10.24 环境变量PATH,cp,mv,文档查看cat/more/less/head/tail
- 17、Java并发性和多线程-避免死锁
- Oracle RAC 10.2.0.5升级到11.2.0.4遇到的问题
- js判断url是否有效
- 《面向模式的软件体系结构3-资源管理模式》读书笔记(3)--- Eager Acquisition模式...
- 为informix数据库中的表创建同义词
- oralce的function处理考勤时间节点以及计算工作时间