[英]Ramda: filter by “fuzzy search”
我列出了IMDb的前100部电影。 给定标题,我试图找到一种通过它进行“模糊搜索”的方法。 即,如果您键入"shaw"
,结果将显示"The Shawshank Redemption"
。 如果未键入任何内容(即search
是一个空字符串),它将不会过滤任何电影。
我的选择器如下:
export const selectMovies = createSelector(
getMovies,
getQueryParams,
(movies, { search = '' }) => R.filter(
R.propSatisfies(R.contains(search), 'title'),
movies
),
)
其中getMovies
是一个返回Movie[]
的函数,而getQueryParams
返回一个具有键search
和字符串值的对象。
现在,虽然我可以按标题粗略地对其进行过滤,但似乎存在许多问题。 例如,如果我输入"sha"
,我将获得Shawshank兑换。 但是,如果输入"shaw"
,则不会获得肖申克的兑换。
有没有一种好的方法用ramda实现基于字符串的“模糊过滤器”?
这未经测试,但我认为您可以轻松编写:
const containsInsensitive = child => parent => contains(toLower(child), toLower(parent))
然后更换
R.contains(search)
同
containsInsensitive(search)
那应该是全部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.