是否可以过滤那些匹配搜索字符串的对象?
const arr = [
{ title: 'Just an example' },
{ title: 'Another exam'},
{ title: 'Something different'}
]
我试过这个
arr.filter(x => { return x.title === searchStr });
但这只会过滤完全匹配,但我需要找到所有部分匹配。 let searchStr = 'exam'
应该给我两个对象(第一个和第二个),let searchStr = 'examp'
应该只给我一个对象作为结果。
答案 0 :(得分:10)
从你的问题我会假设你也想要匹配你的字符串的大写和小写版本,所以这里RegExps是正确的(但不是唯一的)选择。
首先,在循环外部使用RegExp定义不区分大小写的i
flag(这样可以避免在每次迭代时重新创建一个新的RegExp实例):
private void clbFolders_KeyUp(object sender, KeyEventArgs e) { Update(); }
private void clbFolders_MouseUp(object sender, MouseEventArgs e) { Update(); }
private void Update()
{
btnDelete.Enabled = clbFolders.CheckedItems.Count > 0;
}
然后,您可以使用RegExp#test过滤列表(String#match也可以):
const regexp = new RegExp(searchStr, 'i');
您还可以使用arr.filter(x => regexp.test(x.title))
的{{3}}方法,在比较它们之前将两个字符串转换为小写:
String
答案 1 :(得分:5)
由于您使用的是ES6,请使用includes
方法测试子字符串。
3.0
答案 2 :(得分:0)
您可以使用indexOf进行检查,还可以添加toLowerCase()方法来增加匹配的可能性
myArr.filter(function(x) {
return x.title.toLowerCase().indexOf(searchString.toLowerCase()) > -1;
}