點燈坊

失くすものさえない今が強くなるチャンスよ

使用 takeWhile() 根據自訂條件取得 String 前幾個 Char

Sam Xiao's Avatar 2019-07-17

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

takewhile001

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() 使其結果反向,相當於 !

takewhile002

Conclusion

  • takeWhle()filter() 用法很類似,但 filter() 是取得符合條件所有 char,而 takeWhile() 是取得符合條件前 n 個 char
  • takeWhile() 除了用在 string,也能用在 array

Reference

Ramda, takeWhile()
Ramda, complement()
Ramda, equals()