我正在对缓存的查询结果进行过滤,以查看其是否具有搜索值。
return this.cachedResults.filter(f => f.name.toLowerCase().indexOf(this.searchValue.toLowerCase()) !== -1);
如果searchvalue
与f.name
完全相同,则效果很好。我要过滤,即使它具有部分值。就像通配符过滤一样。我该怎么办?
答案 0 :(得分:3)
如果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)
}
答案 1 :(得分:3)
尝试使用regexp(在?
和*
通配符的支持下)
let cachedResults = ['abcdef', 'abc', 'xyz', 'adcf', 'abefg' ];
let wild = 'a?c*';
let re = new RegExp('^'+wild.replace(/\*/g,'.*').replace(/\?/g,'.')+'$');
let result = cachedResults.filter( x => re.test(x.toLowerCase()) );
console.log(result);