Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从输入创建排除过滤器_Javascript_Reactjs - Fatal编程技术网

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()));
});