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

时间:2017-02-04 02:05:14

标签: javascript ecmascript-6

是否可以过滤那些匹配搜索字符串的对象?

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'应该只给我一个对象作为结果。

3 个答案:

答案 0 :(得分:10)

从你的问题我会假设你也想要匹配你的字符串的大写和小写版本,所以这里RegExps是正确的(但不是唯一的)选择。

RegExp解决方案:

首先,在循环外部使用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;
}