繁体   English   中英

拉姆达:按“模糊搜索”过滤

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM