Lo-Dash 是我一個相見恨晚超好用的 library。 (大概 3 個月前才知道它~)
Lo-Dash 提供很多我們平常 coding 會用到的工具函式,部分函式的效能甚至比原生 JavaScript 函式還要快。
(ex: jsperf lodash forEach vs native forEach)
假如把程式裡某些原生函式換成 Lo-Dash 操作,會增加網站整體的速度。
總之 Lo-Dash 的函式超好用!
我常用到的 Lo-Dash 函式有以下四種分類:Arrays, Collections, Objects, Utilities
ex.1: Arrays.range()
// 輕輕鬆鬆建立 1911 - 2014 年的 array
var years = _.range(1911, 2014);
ex.2: Collections.filter()
// 篩選偶數
var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
ex.3: Objects.has()
// 找尋是否某個值在某個很長的 objects 裡面
var map = {'TW': '台灣', 'JP': '日本', ... 超多選項};
var isTWInMap = _.has(map, 'TW');
ex.4: Utilities.random()
// 隨機取得一個從 0 到 100 的整字
var num = _.random(0, 100);
在官網上可以找到更多很好的例子,整理的很完整。
如何在 AngularJS 架構下引入 Lo-Dash ?
HTML:
<script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>
JavaScript:
app.controller('myCtrl', function ($scope){
var ctrl = this;
// 使用 Lo-Dash
ctrl.list = _.range(1911, 2014);
})
完整範例 http://plnkr.co/edit/vP1AKDrFzYbYZcbVcQG5?p=preview
可是,竟然我們已經用了 AngularJS 框架了, 來點 AngularJS 的味道吧。
方法 1. 把 Lo-Dash 放在 factory 做成一個 Service。
app.factory('lodash', ['$window', function($window) {
return $window._; // LoDash 一定要先 include 進來
}])
app.controller('myCtrl', ['$scope', 'lodash', function ($scope, _ ){
// 這邊的 _ 代表 Lo-Dash
}])
方法 2. 把 Lo-Dash 獨立成一個 module
angular.module(‘LoDash', []).factory(‘lodash', function($window) {
return $window._; // LoDash 一定要先 include 進來
});
app.module('myApp', ['LoDash']);
app.controller('myCtrl', ['$scope', 'lodash', function ($scope, _){
// 這邊的 _ 代表 Lo-Dash
}])
個人喜歡第二種,因為第一種方法不適用當架構有多個 modules ( Modularity ),
這樣會造成每個 modules 都要有 LoDash factory。
方法 3. 直接使用 _ 在程式中 ( global variable 用法)
不在外面特定包任何 service 或 Module。
覺得上面兩種方法有點多此一舉的朋友可以直接用 _。
(這樣好方便阿,可是未來會不好維護的感覺... )
假如有使用 use strict ,直接用 _ 會有 warning 噢。
大家快去下載 Lo-Dash 吧~ (推坑)
聽過 Lo-Dash 的人,應該也聽過 Underscore.js。
Lo-Dash 是當初一些人因覺得 Underscore.js 的團隊維護效率很低, issue 修很慢。 (註一)
所以自己 fork 出來修改,想完成更有效率跟跨瀏覽器的 library。
( Lo-Dash 官網有 'Features not in Underscore' 的文章,可見戰意十足)
因為 Lo-Dash 立足於 Underscore.js, 所以用 Underscore.js 的人可無痛換到 Lo-Dash 的。
(網路上有很多比較文,可以去看看後再決定 :-P )
註一: Lo-Dash作者在 Stack Overflow 解釋 為什麼出來做 Lo-Dash
沒關係,我剛剛格式也沒有用好,所以下面文章被 JavaScript 的色塊擋住了。
而且你說的也沒錯~ XD
Lo-Dash 看起來從 2013年開始崛起 (Google trend) , 難怪我沒追到.. Orz..