如何用字符串数组过滤另一个字符串数组(JavaScript)
解决方案
直接用filter()结合every()就能搞定核心逻辑,代码如下:
const songArray = ["Holiday", "Holiday - Remastered Remix", "Holiday - Live in Portugal", "Holiday (Remix)", "Like a Prayer", "Like a Prayer - Remaster", "Like a Prayer - Remixed 2012", "Music", "Music (Remix)"]; const filterWords = ["Remaster", "- Live in", "Remix"]; const filteredSongs = songArray.filter(song => { // 检查当前歌曲是否不包含任何过滤词 return filterWords.every(word => !song.includes(word)); }); console.log(filteredSongs); // 输出 ["Holiday", "Like a Prayer", "Music"]
逻辑说明
filter()遍历原数组,只保留返回true的元素every()用于判断所有过滤词都不满足“在歌曲名中存在”的条件:- 对每个过滤词,用
!song.includes(word)检查歌曲名里没有这个词 - 只有当所有过滤词都符合“不在歌曲里”时,
every()才返回true,这首歌才会被保留
- 对每个过滤词,用
踩坑原因分析
你遇到的重复添加问题,大概率是嵌套循环时逻辑写反了:比如遍历过滤词时,只要遇到一个过滤词不在歌曲里就把歌曲加入新数组,而非等所有过滤词检查完毕、确认没有匹配项再加入。这种情况下,一首歌如果包含多个过滤词,会被多次触发添加操作,导致重复。
用filter()+every()的组合可以避免手动循环的逻辑错误,代码更简洁可靠。
内容的提问来源于stack exchange,提问作者DBN
相关产品推荐
相关产品推荐

