drop()
只能刪除 String 固定前幾個 Char,若想自行提供自訂條件 Predicate,就得使用 dropWhile()
。
Version
macOS Mojave 10.14.5
VS Code 1.36.1
Quokka 1.0.238
Ramda 0.26.1
Imperative
let data = 'FP in JavaScript';
// dropWhile :: (a -> Boolean) -> String -> String
let dropWhile = pred => str => {
let i = 0;
while(i < str.length && pred(str[i])) {
i++;
}
return str.slice(i);
};
dropWhile(x => x !== 'J')(data); // ?
dropWhile()
意義為當 predicate 為 true
時刪除 char,直到 false
時停止刪除。
建立 dropWhile()
,imperative 會使用 while
loop,當 i
小於 length
且 predicate 為 true
時 i
增加 1
,最後使用 slice()
回傳剩餘 string。
Ramda
import { dropWhile } from 'ramda';
let data = 'FP in JavaScript';
dropWhile(x => x !== 'J')(data); // ?
Ramda 已經提供 dropWhile()
,可直接使用。
dropWhile()
(a → Boolean) → [a] → [a]
根據自訂條件刪除 array 前幾筆資料
(a -> Boolean)
:自訂條件 predicate
[a]
:data 為 array
[a]
:回傳刪除 array 前幾筆資料後的剩餘 array
Point-free
import { dropWhile, equals, complement } from 'ramda';
let data = 'FP in JavaScript';
let pred = complement(equals)('J');
dropWhile(pred)(data); // ?
也可將 x => x <= 2
進一步使用 gte(2)
使之 point-free。
Conclusion
dropWhle()
與takeWhile()
用法很類似,但takeWhile()
是取得符合條件前 n 個 char,而dropWhile()
是刪除符合條件前 n 個 chardropWhile()
除了用在 string,也能用在 array