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

Typescript数组多过滤器实现:如何获取array1中不在array2、array3的元素

实现方案

方案1:直接合并判断条件(适合小数据量)

直接在filter的回调里用逻辑与&&拼接两个排除判断即可,单条语句就能完成需求:
如果你的数组元素是普通值(比如示例中的字符串),写法如下:

const result = array1.filter(item => !array2.includes(item) && !array3.includes(item));

如果你的数组元素是对象,需要比对id匹配,写法如下:

const result = array1.filter(element => !array2.some(ele => element.id === ele.id) && !array3.some(ele => element.id === ele.id));

方案2:用Set优化查询(适合大数据量)

如果数组元素较多,推荐先把需要排除的特征值(比如id、或者普通元素本身)存入Set,利用Sethas方法O(1)的查询效率提升性能,后续需要新增排除数组时也只要往Set的合并列表里加即可,扩展性更强:

普通值版本

const result = array1.filter(item => !new Set([...array2, ...array3]).has(item));

对象id匹配版本

const result = array1.filter(element => !new Set([...array2.map(i => i.id), ...array3.map(i => i.id)]).has(element.id));

如果不想每次循环都创建Set,也可以提前把Set定义出来,性能会更好:

const excludeIdSet = new Set([...array2.map(i => i.id), ...array3.map(i => i.id)]);
const result = array1.filter(element => !excludeIdSet.has(element.id));

内容的提问来源于stack exchange,提问作者Frances

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:12:03