Javascript 通配符过滤

Javascript 通配符过滤,javascript,Javascript,我正在对缓存的查询结果进行筛选,以查看它是否具有搜索值 return this.cachedResults.filter(f => f.name.toLowerCase().indexOf(this.searchValue.toLowerCase()) !== -1); 如果searchvalue与f.name完全相同,这将非常有效。我想过滤,即使它有部分值。就像一张通配符。我该怎么做呢?如果f.name包含整个searchValue在什么位置并不重要,那么您所做的也会部分匹配 您可

我正在对缓存的查询结果进行筛选,以查看它是否具有搜索值

 return this.cachedResults.filter(f => f.name.toLowerCase().indexOf(this.searchValue.toLowerCase()) !== -1); 

如果
searchvalue
f.name
完全相同,这将非常有效。我想过滤,即使它有部分值。就像一张通配符。我该怎么做呢?

如果
f.name
包含整个
searchValue
在什么位置并不重要,那么您所做的也会部分匹配

您可能还希望,即使
searchValue
包含整个
f.name
,它也应该匹配,而不仅仅是相反

return this.cachedResults.filter(f => {
  return f.name.toLowerCase().indexOf(this.searchValue.toLowerCase()) !== -1)
    || this.searchValue.toLowerCase().indexOf(f.name.toLowerCase()) !== -1)
}


也考虑签出< /p> 你所做的也将部分匹配,以防当<代码> f.No.<代码>包含整个<代码>搜索值< /代码>在什么位置无关。

您可能还希望,即使
searchValue
包含整个
f.name
,它也应该匹配,而不仅仅是相反

return this.cachedResults.filter(f => {
  return f.name.toLowerCase().indexOf(this.searchValue.toLowerCase()) !== -1)
    || this.searchValue.toLowerCase().indexOf(f.name.toLowerCase()) !== -1)
}

也考虑签出< /p> 尝试使用ReGEXP(以下支持<代码> 和<代码> */COD>通配符)

让cachedResults=['abcdef','abc','xyz','adcf','abefg'];
设wild='a?c*';
让re=newregexp('^'+wild.replace(/\*/g,'.'.')。replace(/\?/g,'.')+'$);
让result=cachedResults.filter(x=>re.test(x.toLowerCase());
控制台日志(结果)
尝试使用regexp(下面是对
*
通配符的支持)

让cachedResults=['abcdef','abc','xyz','adcf','abefg'];
设wild='a?c*';
让re=newregexp('^'+wild.replace(/\*/g,'.'.')。replace(/\?/g,'.')+'$);
让result=cachedResults.filter(x=>re.test(x.toLowerCase());

控制台日志(结果)这也是一个javascript问题,在这个问题中没有angular或typescript的特别之处。不确定你的意思。如果
f.name
的任何部分包含字符串
this.searchValue
,则
filter
中的check表达式将返回
true
。您能提供一个它不起作用的场景吗?@Igor是正确的,只要字符序列存在,这将返回部分匹配。与此问题无关,但您可以使用
。includes(…)
而不是
indexOf(…)!==-1
并通过在变量中缓存
this.searchValue.toLowerCase()
的结果来提高大型集合的性能,因为它的结果值总是相同的。这也是一个javascript问题,在这个问题中没有angular或typescript的特殊之处。不确定您的意思。如果
f.name
的任何部分包含字符串
this.searchValue
,则
filter
中的check表达式将返回
true
。您能提供一个它不起作用的场景吗?@Igor是正确的,只要字符序列存在,这将返回部分匹配。与此问题无关,但您可以使用
。includes(…)
而不是
indexOf(…)!==-1
并通过在变量中缓存
this.searchValue.toLowerCase()的结果来提高大型集合的性能,因为它的结果值总是相同的。这是有道理的,尽管以简洁的名义,代码有点不可读。我不知道这是否就是OP的意思。我对现有代码做了最低限度的修改。当然,它可以写得更好。这是有道理的,虽然以简洁的名义,代码有点不可读。我不知道这是否就是OP的意思。我对现有代码做了最低限度的修改。当然,它可以写得更好。