根據一個或者多個屬性對數組進行排序,支持嵌套的屬性。並且能夠在每一個條件中指定排序的方向,並支持傳入比較函數。git
採用 npm 安裝:github
$ npm install --save arr-sort
採用 yarn 安裝:npm
$ yarn add arr-sort
經過給定的對象屬性進行排序:windows
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
localeCompare
去比較排序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. 傳入比較函數排序ui
若是提供了比較函數,數組會根據其返回值排序。比較函數具體能夠參考docscode
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.