use*_*695 6 javascript ecmascript-6
是否可以过滤那些匹配搜索字符串的对象?
const arr = [
{ title: 'Just an example' },
{ title: 'Another exam'},
{ title: 'Something different'}
]
Run Code Online (Sandbox Code Playgroud)
我试过这个
arr.filter(x => { return x.title === searchStr });
Run Code Online (Sandbox Code Playgroud)
但这只会过滤完全匹配,但我需要找到所有部分匹配.let searchStr = 'exam'应该给我两个对象(第一个和第二个),let searchStr = 'examp'应该只给我一个对象作为结果.
lle*_*aff 14
根据您的问题,我将假设您还希望匹配字符串的大写和小写版本,因此RegExps是正确的(但不是唯一的)选择.
首先,在循环外部使用标志定义不区分大小写的RegExp(这样可以避免在每次迭代时重新创建新的RegExp实例):i
const regexp = new RegExp(searchStr, 'i');
Run Code Online (Sandbox Code Playgroud)
然后你可以使用RegExp#test过滤列表(String#match也可以):
arr.filter(x => regexp.test(x.title))
Run Code Online (Sandbox Code Playgroud)
您还可以使用.includes方法String,在比较它们之前将两个字符串转换为小写:
arr.filter(x => x.title.toLowerCase().includes(searchStr.toLowerCase()))
Run Code Online (Sandbox Code Playgroud)
由于您使用的是ES6,请使用该includes方法测试子字符串。
arr.filter(x => x.title.includes(searchStr));
Run Code Online (Sandbox Code Playgroud)