點燈坊

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

使用 test() 搭配 Regular Expression 判斷 String

Sam Xiao's Avatar 2020-12-05

若要判斷資料是否存在於 String,直覺會使用 includes(),事實上也能使用 test()

Version

Ramda 0.27.1

includes()

import { pipe, filter, prop, includes, pluck, map, toUpper } from 'ramda'

let data = [
  { title: 'FP in JavaScript', price: 100 },
  { title: 'Programming Haskell', price: 200 },
  { title: 'Speaking JavaScript', price: 300 }
]

pipe(
  filter(pipe(prop('title'), includes('JavaScript'))),
  pluck('title'),
  map(toUpper)
)(data) // ?

想要將 title 內含 JavaScript 的所有資料取出,然後都轉成大寫。

直覺會在 filter() 的 callback 內先使用 prop() 取出 title,再使用 includes() 判斷是否包含 JavaScript

test000

test()

import { pipe, filter, where, test, pluck, map, toUpper } from 'ramda'

let data = [
  { title: 'FP in JavaScript', price: 100 },
  { title: 'Programming Haskell', price: 200 },
  { title: 'Speaking JavaScript', price: 300 }
]

pipe(
  filter(where({ title: test(/JavaScript/)})),
  pluck('title'),
  map(toUpper)
)(data) // ?
  • filter() 若配合 Object,可使用 where() 避免 callback 內再一次 pipe()
  • test() 內可使用 regular expression,其效果相當於 includes()

test()
RegExp -> String -> Boolean
以 regular expression 判斷 String 是否包含資料

RegExp:傳入 regular expression

String:data 為 String

Boolean:回傳 true 或 false

test001

Conclusion

  • test() 搭配 regular expression 之後,就可提供 filter() 各式各樣的 predicate

Reference

Ramda, test()