lodash 裡的 FP 函式實在太好用啦 — 實戰篇
介紹如何在實戰中使用 FP函式 _.cond、_.flow
lodash 擁有非常高的使用率,很多人也都喜歡它簡單好用的 utils !從 lodash 4.17.15 版開始,lodash/fp 也包含在裡面了(終於不需要額外 install) ,所以若想嘗試導入好用的 FP utils 完全可以無痛轉換啊 (使用 Function Programming可以從任何一個 function 著手,沒有規定一整個專案都要是 FP)。
若不知道什麼是 Functional Programming (FP) 的人,看這篇可能會頗吃力。我在去年鐵人賽寫了一系列文章,可以慢慢閱讀。
此篇會先介紹一下 _.cond、_.flow 這兩個函示,但重點還是會放在如何在實際專案上運用。
好用的 lodash/FP utils
這邊只會簡單介紹一下,並會用在之後實戰中
_.flow([funcs])
把需要執行的 func 按照順序執行
_.flow 其實就是 Functional Programming 裡的 pipe [延伸閱讀: Compose vs. Pipe]


let add = (x, y) => x + y;
let square = n => n*n;const transform = _.flow([ add, square ]);
transform(1, 3); // 16_.cond([ [ func1, func2 ] ])
func1 若回傳 true 那就執行 func2
const func = _.cond([
[() => true, () => 'hi']
])func(); // hi_.cond厲害的是可以有很多個 condition
const func = _.cond([
[(x) => x > 0, () => '大於零'],
[(x) => x < 0, () => '小於零'],
[() => true, () => '其他'] // Default
])func(5); // '大於零'
func('haha'); // '其他'這邊很清楚可以看到三個判斷式,最後一個 () => true 永遠都會回傳 true,也就是 _.cond 的 default setting,若不符合 (x) => x > 0 或 (x) => x < 0 就會執行 default
直接來看實戰 Task
畫面有許多不同圖表,每一個圖表都有相對應的 API,不同 widget API 間 shape 也差異很大。但可以看到每一個圖表都會顯示現在與前一天的資料的變動

我們就先把這個變動的 feature 叫做 getTrendText,程式面來說他會是一個函式並能輸出 以下四種結果

const getTrendText = (data = []) => {}getTrendText([1, 2]); // ↑ 1
getTrendText([2, 1]); // ↓ 1
getTrendText([1, 1]); // No Change
getTrendText([-1, -1]); // N/A這題難的不是 UI 顯示,而是 API Shape 有很多種。不旦有可能是 Array 、Object,就算是同型別但 shape 也可能不同






