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

如何在JavaScript中使用filter按id和type过滤并删除指定数组对象?

解决方案

你现在的问题是代码只通过id做筛选,所以会删除所有同id的元素。要实现仅删除同时匹配指定id和type的对象,需要在筛选逻辑里同时判断两个条件。

核心逻辑

使用filter方法反向筛选:保留那些**不同时满足目标id和目标type**的元素,这样就会自动剔除同时匹配的目标对象。

修正后的代码

假设你要删除的目标id是notification_id,目标type是传入的type参数,代码可以调整为:

// 统一逻辑,不用分if-else
return draft.filter(el => {
  // 排除同时匹配id和type的元素
  return !(el.item?.id === notification_id && el.item?.type === type);
});

如果要保持你原来的分支结构,也可以改成:

if(type === 'SOLD') {
    return draft.filter(el => !(el.item.id === notification_id && el.item.type === 'SOLD'));
 } else {
   return draft.filter(el => !(el.item?.id === notification_id && el.item?.type === type));
}

关键说明

  • filter会返回新数组,原数组不会被修改(如果用immer的draft则遵循其规则)
  • 条件!(A && B)等价于!A || !B,意思是:只要元素的id不等于目标值,或者type不等于目标值,就保留该元素
  • 可选链?.用于避免el.item为空时的报错,确保代码健壮性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:05:20