カリー化
spec
stringだけでできている配列(arr)の各要素について、
指定した部分文字列(str)を含む要素が一個でもあればtrue、
さもなければfalseを返す関数include(arr, str)の実装
interface include {
(arr: string[], str: string): boolean
}
implement (ES6)
function include (arr, str) {
const reg = new RegExp(str)
for (const elem of arr) {
if (reg.test(elem)) {
return true
}
}
return false
}
たとえば、
include(['aiueo', 'kakikukeko'], 'iku') // true
include(['aiueo', 'kakikukeko'], 'uko') // false
というように使える。
ここで、一定の配列に対して様々な部分文字列の検証をしたいとする。
const arr = ['aiueo', 'kakikukeko', 'warota']
include(arr, 'iku') // true
include(arr, 'uko') // false
include(arr, 'asd') // false
include(arr, 'aro') // true
最初からカリー化で実装
function include (arr) {
return (str) => {
const reg = new RegExp(str)
for (const elem of arr) {
if (reg.test(elem)) {
return true
}
}
return false
}
}
たとえば、
include(['aiueo', 'kakikukeko'])('iku') // true
include(['aiueo', 'kakikukeko'])('uko') // false
と使える。
ここで、一定の配列に対して様々な部分文字列の検証をしたいとする。
const arr = ['aiueo', 'kakikukeko', 'warota']
const arrIncludes = include(arr)
arrIncludes('iku') // true
arrIncludes('uko') // false
arrIncludes('asd') // false
arrIncludes('aro') // true
気持ちいい(arrIncludesは長いがIDEの補完機能が効くので然程デメリットではないし、英語的にSVO構文になって読みやすい)
コメント
コメントを投稿