按字符串数组过滤JavaScript数组

时间:2019-09-08 23:38:39

标签: javascript arrays

我有一个看起来像这样的字符串数组

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)

但这给了我一个空数组。正确的用法是什么?

2 个答案:

答案 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);