Javascript 从输入创建排除过滤器
我正在尝试创建一个搜索字符串,该字符串可以从搜索中识别字符 如果文本包含Javascript 从输入创建排除过滤器,javascript,reactjs,Javascript,Reactjs,我正在尝试创建一个搜索字符串,该字符串可以从搜索中识别字符 如果文本包含-,我想将其用作排除 仅当-字符前面有空格或位于位置0时,它才应排除 搜索foo-bar应该只在foo存在但bar不存在的地方搜索 我在CodeSandbox上创建了一个示例: 代码应该是这样工作的,但是识别何时应用every(e=>!title 福 酒吧 根据术语的第一个字母选择条件。类似这样 const movies=['foo','foo bar','baz','qux','foo baz'].map(title=>
-
,我想将其用作排除
仅当-
字符前面有空格
或位于位置0
时,它才应排除
搜索foo-bar
应该只在foo存在但bar不存在的地方搜索
我在CodeSandbox上创建了一个示例:
代码应该是这样工作的,但是识别何时应用every(e=>!title
福
酒吧
根据术语的第一个字母选择条件。类似这样
const movies=['foo','foo bar','baz','qux','foo baz'].map(title=>({title}))
常量搜索='foo-bar'.split('')
console.log(
电影滤镜(
({title})=>search.every(term=>term[0]==='-'?!title.includes(term.substring(1)):title.includes(term))
)
)
这有一个小问题-如果只是`-`(前面有空格,后面没有文本。目前,在键入时,只有在“-”后面键入内容后才会显示结果。这里的示例@Ycon的想法是一样的:您根据自己的要求分析术语,然后使用if-else语句根据您的分析选择所需的条件。因此,请选中if(term=='-'))return true
比if(term[0]=='-')return!title.包括
等。很好。最后,我尝试将您的示例应用于嵌套在“movies”中的一些数据。但是,无法对其应用过滤器。它在这里(第12行)。我的尝试是if(x[0]==='.\35;')返回流派。包括(f=>genres includes包括(x.toLowerCase())
对上述内容稍作修改。它匹配,但仅当完整字符串存在时(即不存在部分匹配,因为搜索适用)。对此有何想法?https://codesandbox.io/s/ZvAqXoOQ
.filter(movie => {
const title = movie.title.toLowerCase();
return search.every(e => title.includes(e.toLowerCase()));
.filter(movie => {
const title = movie.title.toLowerCase();
return search.every(e => !title.includes(e.toLowerCase()));
});