成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

數(shù)組多重篩選條件排序方法

rainyang / 1855人閱讀

摘要:根據(jù)一個(gè)或者多個(gè)屬性對數(shù)組進(jìn)行排序,支持嵌套的屬性。而且可以在每個(gè)條件中指定排序的方向,并支持傳入比較函數(shù)。

arr-sort
根據(jù)一個(gè)或者多個(gè)屬性對數(shù)組進(jìn)行排序,支持嵌套的屬性。而且可以在每個(gè)條件中指定排序的方向,并支持傳入比較函數(shù)。
安裝

采用 npm 安裝:

$ npm install --save arr-sort

采用 yarn 安裝:

$ yarn add arr-sort
用法

通過給定的對象屬性進(jìn)行排序:

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"}]
參數(shù)
arrSort(array, comparisonArgs);

array: { Object Array } 待排序的數(shù)組

comparisonArgs: { Object Array } 一個(gè)或者多個(gè)對象組成的數(shù)組。 結(jié)構(gòu)如下:{ "attr": attr, "asc": asc }

attr: { String } 對象屬性

asc: { Boolean | Function } 指定排序的方向

true: 升序(默認(rèn)值)

false: 降序

function: 傳入的比較函數(shù)

注意

如何沒有提供 attr 屬性, 則這次的排序會(huì)自動(dòng)跳過

attr 屬性值類型可以是 string 或者 number

如果是 string, 我們采用 localeCompare 去比較排序

如果是 number, 我們直接比較值的大小

如果提供的比較函數(shù)沒有返回值,則這次的排序會(huì)自動(dòng)跳過

例子

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. 傳入比較函數(shù)排序

如果提供了比較函數(shù),數(shù)組會(huì)根據(jù)其返回值排序。比較函數(shù)具體可以參考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} ]
關(guān)于 相關(guān)項(xiàng)目

arr-del: 一次性刪除數(shù)組指定index的元素 | homepage

集成測試

跑集成測試是一個(gè)非常好的熟悉一個(gè)項(xiàng)目及其API的方法。你可以通過以下命令安裝依賴并跑測試:

$ npm install && npm test
作者

tywei90

github/tywei90

blog/tywei90

許可證

Copyright ? 2018, tywei90.
Released under the MIT License.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107520.html

相關(guān)文章

  • 集合數(shù)據(jù)處理(C#、JavaScript 和 Java)

    摘要:系列公用委托都用于委托帶有返回值的的方法,所有都是最后一個(gè)參數(shù)代表返回值類型。的字面對象據(jù)稱也是哈希實(shí)現(xiàn)。 Java 丟了好多年,最近在揀起來,首先當(dāng)然是了解這么多年來它的變化,于是發(fā)現(xiàn)了 Java 8 的java.util.stream。在學(xué)習(xí)和試驗(yàn)的過程中,相比較于 C# 和 javascript,有那么些心得,作文以記之。 早些時(shí)間寫過一篇《ES6 的 for..of 和 Ge...

    zacklee 評論0 收藏0
  • 集合數(shù)據(jù)處理(C#、JavaScript 和 Java)

    摘要:系列公用委托都用于委托帶有返回值的的方法,所有都是最后一個(gè)參數(shù)代表返回值類型。的字面對象據(jù)稱也是哈希實(shí)現(xiàn)。 Java 丟了好多年,最近在揀起來,首先當(dāng)然是了解這么多年來它的變化,于是發(fā)現(xiàn)了 Java 8 的java.util.stream。在學(xué)習(xí)和試驗(yàn)的過程中,相比較于 C# 和 javascript,有那么些心得,作文以記之。 早些時(shí)間寫過一篇《ES6 的 for..of 和 Ge...

    sherlock221 評論0 收藏0
  • Vue.js 實(shí)踐(2):實(shí)現(xiàn)多條件篩選、搜索、排序及分頁的表格功能

    摘要:基礎(chǔ)布局的中主要為部分,分別是用于搜索篩選和分頁的表單控件用于排序表格的表頭以及用于展示數(shù)據(jù)的。這也是前瞻發(fā)布之后,提出廢棄部分功能后許多人反應(yīng)較為強(qiáng)烈的原因。 與上周的第一篇實(shí)踐教程一樣,在這篇文章中,我將繼續(xù)從一種常見的功能——表格入手,展示Vue.js中的一些優(yōu)雅特性。同時(shí)也將對filter功能與computed屬性進(jìn)行對比,說明各自的適用場景,也為vue2.0版本中即將刪除的部...

    Profeel 評論0 收藏0
  • Vue.js 實(shí)踐(2):實(shí)現(xiàn)多條件篩選、搜索、排序及分頁的表格功能

    摘要:基礎(chǔ)布局的中主要為部分,分別是用于搜索篩選和分頁的表單控件用于排序表格的表頭以及用于展示數(shù)據(jù)的。這也是前瞻發(fā)布之后,提出廢棄部分功能后許多人反應(yīng)較為強(qiáng)烈的原因。 與上周的第一篇實(shí)踐教程一樣,在這篇文章中,我將繼續(xù)從一種常見的功能——表格入手,展示Vue.js中的一些優(yōu)雅特性。同時(shí)也將對filter功能與computed屬性進(jìn)行對比,說明各自的適用場景,也為vue2.0版本中即將刪除的部...

    ChanceWong 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<