数组多重筛选条件排序方法
2018-02-19 01:05
477 查看
arr-sort
根据一个或者多个属性对数组进行排序,支持嵌套的属性。而且可以在每个条件中指定排序的方向,并支持传入比较函数。安装
采用 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
作者
tywei90github/tywei90
blog/tywei90
许可证
Copyright © 2018, tywei90.Released under the MIT License.
相关文章推荐
- 数组多重筛选条件排序方法,外加一些简单常用的数组方法
- C#使用linq对数组进行筛选排序的方法
- 一个很好用的PHP数组筛选多列的方法~
- 数组中排序的一些方法,选择排序,冒泡排序,和数组中自己的方法
- AngularJS+添加+条件筛选+排序
- Java 数组的四种排序方法 代码
- C#数组排序的两种常用方法
- java简单实现双色球彩票模拟实例(数组、排序、方法、随机数、键盘输入)
- Perl基本数组排序方法介绍
- 回调函数及数组中sort()方法实现排序的原理
- IOS学习之OC语言数组的排序方法
- JavaScript 数组的重排序方法
- ***PHP 数组排序 +php二维数组排序方法(PHP比较器)
- iOS开发数组去重方法,排序去重和包含元素
- 数组排序 java.util.Arrays类的sort方法
- IOS数组的排序和筛选
- 数组对象自带的排序方法,数组去重
- php简单实现多维数组排序的方法
- 求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从大到小的顺序进行排序。
- PHP按二维数组中的某个值重新排序数组 usort的使用方法