You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用字符串数组过滤另一个字符串数组(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:40:27