JS:用于部分匹配的过滤器对象数组

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(这样可以避免在每次迭代时重新创建新的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)

String#包括解决方案:

您还可以使用.includes方法String,在比较它们之前将两个字符串转换为小写:

arr.filter(x => x.title.toLowerCase().includes(searchStr.toLowerCase()))
Run Code Online (Sandbox Code Playgroud)


GOT*_*O 0 6

由于您使用的是ES6,请使用该includes方法测试子字符串。

arr.filter(x => x.title.includes(searchStr));
Run Code Online (Sandbox Code Playgroud)