How to Create CSV File and Download it Automatically ?
We can create a CSV file and download it automatically without any packages.
失くすものさえない今が強くなるチャンスよ
We can create a CSV file and download it automatically without any packages.
If we want to get key and value from Object simultaneously, we used to use keys
to get all keys, and then use []
with the key to get value. Now we can use toPairs
to get key and value at once.
若想刪除 Object 的 Property 且不影響原本 Object,omit
提供非侵入式方式刪除 Property。
若在 Promise Chain 同時使用多個 otherwise
時,只有第一個 otherwise
會被觸發,若要其他 otherwise
也執行,必須重新發出 Rejected。
雖然實務上 Promise Chain 大都只有一個 otherwise
,但事實上也能同時有多個 otherwise
,可繼續新的 Asynchornous Function,或者將 Error Handling 在不同 otherwise
分段處理。
map
是 FP 最具代表性的 Higher Order Function,僅管大部分 FP 原則都沒搞得很懂,但 map
一定都用得很熟;大部分人都將 map
用在 Array,但因為 First Class Function,map
也能將兩個 Function 綁定。
支援 chain
的 Object 稱為 Chain,可使用 chain
將 Chain 與回傳 Chain 的 Function 綁定改變 Chain。
ap
才是正統 S Combinator,但 chain
的 Type Signature 與 ap
非常類似,姑且稱之為 S’ Combinator。
Binary Function 若第二個 Argument 須先經過其他 Unary Function 運算再傳入,此為 S Combinator,可使用 ap
實現。
ap
除了用來將 Apply 與包進 Apply 的 Function 綁定外,也常用來平行執行 Side Effect。
支援 ap
的 Object 稱為 Apply,可使用 ap
將 Apply 與回傳 Apply 的 Function 綁定改變 Apply。
一般 Binary Function 並無法處理 Maybe、Either 或 Future,但只要透過 lift
提升後就可處理。
一般 Unary Function 並無法處理 Maybe、Either 或 Future,但只要透過 lift
提升後就可處理。
若希望 Browser 能自動均分 section
剩餘寬度,可使用 justify-content
的 space
系列設定。
zip()
雖然可直接使用,但事實上也能使用 zipWith()
組合而成。
在重構階段常會出現 converge(f, [g, I])
Pattern,此時可重構成 chain(f, g)
。
在重構階段常會出現 converge(f, [I, g])
Pattern,此時可重構成 ap(f, g)
。
若要判斷 String 是否為 Palindrome,可使用 reverse()
與 equals()
判斷。
實務上會遇到將 String 的首字變大寫,其餘變小寫,這種常見需求該如何實現呢 ?
實務上常常用到 chain()
,只是一時看不出來而已,可先用已知 Higher Order Function 拆解,最後再重構成 chain()
。
若要將 Object 的所有 Value 轉成 Array,可使用 values()
。
但若要忽略單一 Property 會使用 dissoc()
,但若為單一 Nested Property 則要使用 dissocPath()
。
有時 API 會回傳 Object,但實務上 Object Array 還是比較好用,因此我們會想將 Object 轉成 Object Array。
對於可有可無資料,後端 API 可能回傳 Object,其 Property 不一定存在,但對於前端而言,我們想要的是 Array 方便 HTML template 做 v-for
,本文由實際 API 回傳資料所改寫,接近實務上應用。
由於 pipe()
要求每個 Argument 都是 Function,因此實務上常遇到需組合出 () -> a
的需求,always()
與 thunkify()
皆可完成,但兩者觀念不太一樣。
thunkify()
在 Ramda 算較罕用的 Function,若搭配能接受 Thunk 的 API 或準備 Function 為參數,thunkify()
就能發揮功用。
實務上常遇到 API 回傳資料為 Nested Object Array,但卻要以 ,
隔開的 String 顯示,這種常見需求該如何實現呢 ?
實務上常遇到 API 回傳資料為 Nested Array,但卻要以 ,
隔開的 String 顯示,這種常見需求該如何實現呢 ?
Lens 本質就是 Function,因此也可使用 compose()
組合小 Lens 成為大 Lens。
lensProp()
可針對 Object 建立 Lens,若要針對 Array 則要使用 lensIndex()
。
lensPath()
可針對複雜資料結構建立 Lens,如 Nested Object、Nested Array 或 Object Array。
assocPath()
除了能用在 Nested Object 外,也能用在 Nested Array。
若新增 Property 只有一層,則 assoc()
適用;若新增 Property 有多層,則要使用 assocPath()
。
set()
與 over()
都可使用 Lens 新增修改 Property,唯 set()
是傳入值,而 over()
是傳入 Function。
若想對 Object 新增 Property 或修改 Property,Ramda 提供了 assoc()
。
若想將原本 Variadic Function 改成接受 Array 的 Unary Function,可使用 apply()
加以轉換。
建立 Lens 之後,set()
可藉由 Lens 寫入 Object 的 Property,並結合 Function Pipeline 與組合其他 Function。
建立 Lens 之後,view()
可藉由 Lens 讀取 Object 的 Property,並結合 Function Pipeline 與組合其他 Function。
雖然可組合 lens()
、prop()
與 assoc()
組合出 Lens,但實務上會使用更精簡的 lensProp()
。
lens()
為 Lens 最基礎 Function,可用來建立 Getter/Setter Pair 的 Lens。