lodash常用工具

wtf1002發表於2018-07-19

1 深層查詢屬性值 放入一個陣列

    var ownerArr = [{
    "owner": "Colin",
    "pets": [{
        "name": "dog1"
    }, {
        "name": "dog2"
    }]
    }, {
    "owner": "John",
    "pets": [{
        "name": "dog3"
    }, {
        "name": "dog4"
    }]
    }];
    console.log(_.map(ownerArr, "pets[0].name"));
    // => ['dog1','dog3']
複製程式碼

2 深拷貝

    var objB = _.cloneDeep(objA);
    objB === objA // false
複製程式碼

3 隨機數

    _.random(15, 20);   //15到20的整數
    _.random(15, 20, true);   //15到20的小數
複製程式碼

4 物件去除屬性

    var objA = {"name": "colin", "car": "suzuki", "age": 17};

    objA = _.omit(objA, ['car', 'age']);
    // => {"name": "colin"}

    objA = _.omit(objA, _.isNumber);
    // => {"name": "colin", "car": "suzuki"};
複製程式碼
  • 物件留下屬性 用法與omit基本一致 _.pick(object, [props])

5 陣列拆分

    const arr = [1,2,3,4,5,6,7,8,9];
    _.chunk(arr,2)    //每兩個拆分為一個新的陣列   
    // =>[[1,2],[3,4],[5,6],[7,8],[9]]
複製程式碼

6 陣列去除假值 已有 Array.filter(Boolean)代替

    _.compact(['1','2',' ',0])
    // => ['1','2']
複製程式碼

7 陣列排除含有指定值

    _.difference([3, 2, 1], [4, 2]);
    // => [3, 1]
複製程式碼

8 陣列去除前n個元素,預設為一個 _.dropRight為去除後面

    _.drop([1, 2, 3],n);
    // => [2, 3]
複製程式碼

9 陣列返回新的物件

    _.fromPairs([['fred', 30], ['barney', 40]]);
    // => { 'fred': 30, 'barney': 40 }
複製程式碼

10 陣列交集

    _.intersection([2, 1], [4, 2], [1, 2]);
    // => [2]
複製程式碼

11 陣列遞迴為一組

    _.flattenDeep([1, [2, [3, [4]], 5]]);
    // => [1, 2, 3, 4, 5]
複製程式碼

12 陣列合併為物件

    _.zipObject(['a', 'b'], [1, 2]);
    // => { 'a': 1, 'b': 2 }
複製程式碼

13 陣列強制轉換

    _.castArray(1);
    // => [1]
    
    _.castArray({ 'a': 1 });
    // => [{ 'a': 1 }]
複製程式碼

14 延遲 wait 毫秒後呼叫 func。 呼叫時,任何附加的引數會傳給func。

    _.delay(function (text) {
        console.log(text);
    }, 1000, 'later');
複製程式碼

15 只呼叫一次的函式

    var initialize = _.once(fn);
    initialize();
    initialize();
    // `initialize` 只能呼叫 `fn` 一次。
複製程式碼

16 陣列求和

    _.sum([4, 2, 8, 6]);
    // => 20
複製程式碼

17 物件值求和

    var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];

    _.sumBy(objects, function(o) { return o.n; });
    // => 20
    
    _.sumBy(objects, 'n');
    // => 20
複製程式碼

18 數字是否在指定區間 _.inRange(number, [start=0], end)

    _.inRange(3, 2, 4);
    // => true
    
    _.inRange(4, 8);
    // => true
    
    _.inRange(4, 2);
    // => false
    
    _.inRange(2, 2);
    // => false
    
    _.inRange(1.2, 2);
    // => true
    
    _.inRange(5.2, 4);
    // => false
    
    _.inRange(-3, -2, -6);
    // => true
複製程式碼

19 物件取值放入陣列 _.at(object, [paths])

    var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };

    _.at(object, ['a[0].b.c', 'a[1]']);
    // => [3, 4]
複製程式碼

20 移除object物件 path 路徑上的屬性 _.unset(object, path)

// 返回布林值  之前的物件也發生了改變
var object = { 'a': [{ 'b': { 'c': 7 } }] };
_.unset(object, 'a[0].b.c');
// => true

console.log(object);
// => { 'a': [{ 'b': {} }] };

_.unset(object, ['a', '0', 'b', 'c']);
// => true

console.log(object);
// => { 'a': [{ 'b': {} }] };
複製程式碼

21 修改object物件 path 路徑上的屬性

var object = { 'a': [{ 'b': { 'c': 3 } }] };

_.update(object, 'a[0].b.c', function (n) { return n * n; });
console.log(object);
// => { 'a': [{ 'b': { 'c': 3 } }] }
複製程式碼

22 判斷物件是否含有指定屬性

var users = [
  { 'user': 'barney', 'active': true },
  { 'user': 'fred',   'active': false }
];
 
// The `_.matches` iteratee shorthand.
_.some(users, { 'user': 'barney', 'active': false });
// => false
複製程式碼

以上是個人對lodash常用總結,摘自 lodash 中文文件 ,瞭解更多請訪問 lodash

相關文章