我有一个字符串数组,如下所示
arr = ['video-1', 'video-2', 'cpe-1', 'abc-1', 'abc-2']
我只需通过以下操作将其过滤掉:
let newarr = arr.filter(item => item.indexOf('video') >= 0)
>> newarr = ["video-1", "video-2"]
但是,我尝试使用字符串数组作为输入,通过以下操作提供多个筛选器选项
let q = ['video', 'CPE']
let newarr2 = arr.filter(item => q.indexOf(item) >= 0)但这给了我一个空数组。正确的用法是什么?
发布于 2019-09-08 23:41:16
检查要包含的关键字的.some是否包含在项中。
由于套管也是不同的,所以预先对所有内容调用toLowerCase():
const arr = ['video-1', 'video-2', 'cpe-1', 'abc-1', 'abc-2'];
const keywordsToFind = ['video', 'CPE'];
const keywordsToFindLower = keywordsToFind.map(s => s.toLowerCase());
const newarr2 = arr.filter(
item => keywordsToFindLower.some(
keywordToFind => item.toLowerCase().includes(keywordToFind)
)
);
console.log(newarr2);
发布于 2019-09-08 23:44:59
您可以使用q进行正则表达式,使其比使用其他数组方法更有效:
const arr = ['video-1', 'video-2', 'cpe-1', 'abc-1', 'abc-2'];
const q = ['video', 'CPE'];
const re = RegExp(q.join("|"), "i");
const res = arr.filter(e => re.test(e));
console.log(res);
https://stackoverflow.com/questions/57846502
复制相似问题