take()
只能取得 String 固定前幾個 Char,若想自行提供自訂條件 Predicate,就得使用 takeWhile()
。
Version
macOS Mojave 10.14.5
VS Code 1.36.1
Quokka 1.0.235
Ramda 0.26.1
Ramda
import { takeWhile } from 'ramda';
let data = 'FP in JavaScript';
takeWhile(x => x !== ' ')(data); // ?
Ramda 已經提供 takeWhile()
,可直接使用。
takeWhile()
(a → Boolean) → [a] → [a]
根據自訂條件取得 string 前幾個 char
(a -> Boolean)
:自訂條件 predicate
[a]
:data 為 string
[a]
:回傳 string 前幾個 char
Point-free
import { takeWhile, equals, complement } from 'ramda';
let data = 'FP in JavaScript';
let pred = complement(equals(' '));
takeWhile(pred)(data); // ?
也可將 x => x !== ' '
進一步 point-free。
- 使用
equals()
判斷相等,相當於=== ' '
- 使用
complement()
使其結果反向,相當於!
Conclusion
takeWhle()
與filter()
用法很類似,但filter()
是取得符合條件所有 char,而takeWhile()
是取得符合條件前 n 個 chartakeWhile()
除了用在 string,也能用在 array