根据一个或者多个属性对数组进行排序,支持嵌套的属性。而且可以在每个条件中指定排序的方向,并支持传入比较函数。

安装

采用 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, 我们直接比较值的大小
  • 如果提供的比较函数没有返回值,则这次的排序会自动跳过

例子

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.

数组多重筛选条件排序方法相关推荐

  1. java 数组排序论文_Java中运用数组的四种排序方法

    标签: <1>利用Arrays带有的排序方法快速排序 import java.util.Arrays; 2 public class Test2{ public static void m ...

  2. JAVA中运用数组的四种排序方法

    JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法. 快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现. 冒泡法是运用遍历数组进 ...

  3. 数组的四种排序方法介绍

    最近在学习和练习一些算法方面的知识,发现在java中运用数组进行排序一般就四种方法:快速排序法.冒泡法.选择排序法.插入排序法.我们只要掌握这四种排序方法,基本上就能解决所有的排序问题.所以我接下来就 ...

  4. MyBatisPlus条件构造器带条件排序方法orderBy、orderByDesc、orderByAsc使用

    场景 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/37194 基础搭建: https://blog.csdn.net/B ...

  5. PHP中数组的三种排序方法

    一.冒泡排序法 说明:找到最大的数,排列到最后面,然后继续找 例: $arr = array(3,5,-1,0,2); for($i=0;$i<count($arr)-1;$i++){ for( ...

  6. Java中运用数组的四种排序方法_JAVA中运用数组的四种排序方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 快速排序 public class TestMain { public static void main(String[] args) { Integer ...

  7. Java数组传参sql_Java中如何传一个数组作为筛选条件操作数据库(sql中foreach的使用)...

    实现步骤: 1. 把前端获取到的要删除的数据的nId,以逗号作为分隔符,组成一个da(其中checkStatus.data.length和checkStatus.data[i].nId是layui里面 ...

  8. Django 实现搜索结果分页(筛选结果分页),以及优雅添加多个筛选条件

    本人另外有一篇文档是专门更新Django的一些操作笔记,有需要可以收藏关注一下:Django笔记 目录 具体实现如下: 效果展示 分页器参考:Django高级之-分页器 场景:在对查询列表进行搜索.排 ...

  9. Excel2016中如何取消设置的筛选条件

    在一张大型复杂的Excel表格中,可以通过强大的筛选功能迅速找出符合条件的数据,而其他不满足条件的数据,Excel工作表会自动将其隐藏. 在设置了数据筛选后,如果想还原到原始数据表中,需要取消设置的筛 ...

最新文章

  1. 设计模式之单例模式(Singleton)摘录
  2. SAP MM 物料主数据里的‘Packaging Material Type‘字段
  3. android案例一 电话拨号器
  4. 【Python教程】七种创建对象的方式,你知道几种?
  5. Python有了concurrent的话mutiprocessing和threading还有存在的意义吗?
  6. wget命令---Linux学习笔记
  7. 没错,继事理图谱后,我们又搞事情了:数地工场自然语言处理语义开放平台正式对外发布!
  8. python输出jpg_利用python实现.dcm格式图像转为.jpg格式
  9. html span标签 不换行(有时span带中文时候是可以自动换行的)
  10. 【C语言】数学也没辣么难嘛
  11. 势头强劲的 Python PK 强大的 C++,究竟谁更胜一筹?
  12. 如何用PyTorch训练图像分类器
  13. 新书预告<******笔记>快赏
  14. C语言printf语法
  15. 个人博客升级改造ing
  16. Android Canvas.DrawLine绘制线段
  17. Xenu Link Sleuth
  18. 【机器学习基础】EM算法
  19. 仙剑奇侠传编年史(转自网络)
  20. oracle里update+where,Oracle 关联表更新 update ,where exists

热门文章

  1. 转:PHP程序里的敏感信息处理方法
  2. Zend Framework 开发记录 - 代码片段–jquery–select控件
  3. ipv6 neutron应用(一)
  4. 10.24 环境变量PATH,cp,mv,文档查看cat/more/less/head/tail
  5. 17、Java并发性和多线程-避免死锁
  6. Oracle RAC 10.2.0.5升级到11.2.0.4遇到的问题
  7. js判断url是否有效
  8. 《面向模式的软件体系结构3-资源管理模式》读书笔记(3)--- Eager Acquisition模式...
  9. 为informix数据库中的表创建同义词
  10. oralce的function处理考勤时间节点以及计算工作时间