我有一个看起来像这样的字符串数组
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)
但这给了我一个空数组。正确的用法是什么?
答案 0 :(得分:2)
检查您要添加的关键字中的.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);
答案 1 :(得分:1)
您可以使用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);