arr sort " " " " " " " " " " 根據一個或者多個屬性對數組進行排序,支持嵌套的屬性。而且可以在每個條件中指定排序的方向,並支持傳入比較函數。 安裝 採用 "npm" 安裝: 採用 "yarn" 安裝: 用法 通過給定的對象屬性進行排序: 逆向排序 參數 : { Object ...
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, 我們直接比較值的大小
- 如果是 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} ]
關於
相關項目
集成測試
跑集成測試是一個非常好的熟悉一個項目及其API的方法。你可以通過以下命令安裝依賴並跑測試:
$ npm install && npm test
作者
tywei90
許可證
Copyright © 2018, tywei90.
Released under the MIT License.