如何在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
相关产品推荐
相关产品推荐

