loadsh簡介

Twait發表於2019-02-16

loadsh簡介

      Lodash是一個一致性、模組化、高效能的 JavaScript 實用工具庫。Lodash 通過降低 array、number、objects、string 等等的使用難度從而讓 JavaScript 變得更簡單。
Lodash 的模組化方法 非常適用於:

  • 遍歷 array、object 和 string
  • 對值進行操作和檢測
  • 建立符合功能的函式

1、 lodash的引用

npm i -g npm
npm i --save lodash
import _ from `lodash`

2、 lodash的常用方法

  1. 陣列 Array

    • _.difference(array, [values])
      建立一個具有唯一array值的陣列,每個值不包含在其他給定的陣列中。(愚人碼頭注:即建立一個新陣列,這個陣列中的值,為第一個數字(array 引數)排除了給定陣列中的值。)該方法使用 SameValueZero做相等比較。結果值的順序是由第一個陣列中的順序確定。

      如: _.difference([2, 1, 1994], [4, 2]);
       // => [1, 1994] 
    • _.remove(array, [predicate=_.identity])
      移除陣列中predicate(斷言)返回為真值的所有元素,並返回移除元素組成的陣列。predicate(斷言) 會傳入3個引數: (value, index, array)。

       如:var array = [1, 2, 3, 4];
       var evens = _.remove(array, function(n) {
       return n % 2 == 0;
       });
       console.log(array);
       // => [1, 3]
        
       console.log(evens);
       // => [2, 4]
      
      
    • _.uniq(array)
      建立一個去重後的array陣列副本。使用了 SameValueZero 做等值比較。只有第一次出現的元素才會被保留。

       如:_.uniq([2, 1, 2]);
       // => [2, 1]
      
    • _.last(array)
      獲取array中的最後一個元素。

       如:_.last([1, 2, 3]);
       // => 3
  2. 集合 Collection

    • _.forEach(collection, [iteratee=_.identity])
      呼叫 iteratee 遍歷 collection(集合) 中的每個元素, iteratee 呼叫3個引數: (value, index|key, collection)。 如果迭代函式(iteratee)顯式的返回 false ,迭代會提前退出。

        如:_([1, 2]).forEach(function(value) {
          console.log(value);
        });
        // => Logs `1` then `2`.
         
        _.forEach({ `a`: 1, `b`: 2 }, function(value, key) {
          console.log(key);
        });
        // => Logs `a` then `b` (iteration order is not guaranteed).
    • _.filter(collection, [predicate=_.identity])
      遍歷 collection(集合)元素,返回 predicate(斷言函式)返回真值 的所有元素的陣列。 predicate(斷言函式)呼叫三個引數:(value, index|key, collection)。

        如:var users = [
          { `user`: `barney`, `age`: 36, `active`: true },
          { `user`: `fred`,   `age`: 40, `active`: false }
        ];
         
        _.filter(users, function(o) { return !o.active; });
        // => objects for [`fred`]
         
        // The `_.matches` iteratee shorthand.
        _.filter(users, { `age`: 36, `active`: true });
        // => objects for [`barney`]
         
        // The `_.matchesProperty` iteratee shorthand.
        _.filter(users, [`active`, false]);
        // => objects for [`fred`]
         
        // The `_.property` iteratee shorthand.
        _.filter(users, `active`);
        // => objects for [`barney`]
      
      
    • _.groupBy(collection, [iteratee=_.identity])
      建立一個物件,key 是 iteratee 遍歷 collection(集合) 中的每個元素返回的結果。 分組值的順序是由他們出現在 collection(集合) 中的順序確定的。每個鍵對應的值負責生成 key 的元素組成的陣列。iteratee 呼叫 1 個引數: (value)。

        如:var users = [
           { `user`: `barney`, `age`: 36, `active`: true },
           { `user`: `fred`,   `age`: 40, `active`: false }
         ];
         _.groupBy(users, `user`);
         // => {"barney":[{"user":"barney","age":36,"active":true}],"fred":[{"user":"fred","age":40,"active":false}]}
         
         
    • _.includes(collection, value, [fromIndex=0])
      檢查 value(值) 是否在 collection(集合) 中。如果 collection(集合)是一個字串,那麼檢查 value(值,子字串) 是否在字串中, 否則使用 SameValueZero 做等值比較。 如果指定 fromIndex 是負數,那麼從 collection(集合) 的結尾開始檢索。

        如:_.includes([1, 2, 3], 1);
            // => true
             
            _.includes([1, 2, 3], 1, 2);
            // => false
             
            _.includes({ `user`: `fred`, `age`: 40 }, `fred`);
            // => true
             
            _.includes(`pebbles`, `eb`);
            // => true
            
            
    • _.orderBy(collection, [iteratees=[_.identity]], [orders])
      此方法類似於_.sortBy,除了它允許指定 iteratee(迭代函式)結果如何排序。 如果沒指定 orders(排序),所有值以升序排序。 否則,指定為”desc” 降序,或者指定為 “asc” 升序,排序對應值。

        如:var users = [
          { `user`: `fred`,   `age`: 48 },
          { `user`: `barney`, `age`: 34 },
          { `user`: `fred`,   `age`: 40 },
          { `user`: `barney`, `age`: 36 }
        ];
         
        // 以 `user` 升序排序 再  `age` 以降序排序。
        _.orderBy(users, [`user`, `age`], [`asc`, `desc`]);
        // => objects for [[`barney`, 36], [`barney`, 34], [`fred`, 48], [`fred`, 40]]
        
    • _.sortBy(collection, [iteratees=[_.identity]])
      建立一個元素陣列。 以 iteratee 處理的結果升序排序。 這個方法執行穩定排序,也就是說相同元素會保持原始排序。 iteratees 呼叫1個引數: (value)。

        如:var users = [
          { `user`: `fred`,   `age`: 48 },
          { `user`: `barney`, `age`: 36 },
          { `user`: `fred`,   `age`: 40 },
          { `user`: `barney`, `age`: 34 }
        ];
         
        _.sortBy(users, function(o) { return o.user; });
        // => objects for [[`barney`, 36], [`barney`, 34], [`fred`, 48], [`fred`, 40]]
         
        _.sortBy(users, [`user`, `age`]);
        // => objects for [[`barney`, 34], [`barney`, 36], [`fred`, 40], [`fred`, 48]]
         
        _.sortBy(users, `user`, function(o) {
          return Math.floor(o.age / 10);
        });
        // => objects for [[`barney`, 36], [`barney`, 34], [`fred`, 48], [`fred`, 40]]
        
        
    • _.debounce(func, [wait=0], [options={}])
      建立一個 debounced(防抖動)函式,該函式會從上一次被呼叫後,延遲 wait 毫秒後呼叫 func 方法。 debounced(防抖動)函式提供一個 cancel 方法取消延遲的函式呼叫以及 flush 方法立即呼叫。 可以提供一個 options(選項) 物件決定如何呼叫 func 方法,options.leading 與|或 options.trailing 決定延遲前後如何觸發(愚人碼頭注:是 先呼叫後等待 還是 先等待後呼叫)。 func 呼叫時會傳入最後一次提供給 debounced(防抖動)函式 的引數。 後續呼叫的 debounced(防抖動)函式返回是最後一次 func 呼叫的結果。

      注意: 如果 leading 和 trailing 選項為 true, 則 func 允許 trailing 方式呼叫的條件為: 在 wait 期間多次呼叫防抖方法。

      如果 wait 為 0 並且 leading 為 false, func呼叫將被推遲到下一個點,類似setTimeout為0的超時。

        如:// 避免視窗在變動時出現昂貴的計算開銷。
        jQuery(window).on(`resize`, _.debounce(calculateLayout, 150));
         
        // 當點選時 `sendMail` 隨後就被呼叫。
        jQuery(element).on(`click`, _.debounce(sendMail, 300, {
          `leading`: true,
          `trailing`: false
        }));
         
        // 確保 `batchLog` 呼叫1次之後,1秒內會被觸發。
        var debounced = _.debounce(batchLog, 250, { `maxWait`: 1000 });
        var source = new EventSource(`/stream`);
        jQuery(source).on(`message`, debounced);
         
        // 取消一個 trailing 的防抖動呼叫
        jQuery(window).on(`popstate`, debounced.cancel);