国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

數組多重篩選條件排序方法

rainyang / 1847人閱讀

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

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
作者

tywei90

github/tywei90

blog/tywei90

許可證

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107520.html

相關文章

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

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

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

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

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

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

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

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

    ChanceWong 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<