React Native 数组filter方法过滤字符串类型_id不生效问题
问题根因
你的过滤逻辑存在运算符使用错误:你使用了||(逻辑或)连接两个反向判断条件,对于要排除的两个_id来说:
- 当
_id为receiver时,!msg._id.includes("receiver")为假,!msg._id.includes("blockedUsers")为真,假或真的判断结果为真,该对象会被保留 - 当
_id为blockedUsers时,!msg._id.includes("blockedUsers")为假,!msg._id.includes("receiver")为真,假或真的判断结果同样为真,该对象也会被保留
最终所有元素都满足判断条件,所以返回原数组。
解决方案
方案1:直接修改逻辑运算符
将||替换为&&(逻辑与),要求两个反向条件同时满足才保留对象:
this.state.messages.filter(msg => !msg._id.includes("receiver") && !msg._id.includes("blockedUsers"))
方案2:更易维护的写法(推荐)
如果后续可能新增要排除的_id,建议把排除项单独存为数组,用反向包含判断实现过滤,同时如果你的需求是精确匹配_id等于指定值(避免_id中包含对应字符串的正常消息被误删),用这种写法逻辑更清晰:
const excludeIds = ["receiver", "blockedUsers"] // 精确匹配版,推荐 this.state.messages.filter(msg => !excludeIds.includes(msg._id)) // 如果确实需要模糊匹配包含对应字符串的_id,再用这个版本 // this.state.messages.filter(msg => !excludeIds.some(id => msg._id.includes(id)))
内容的提问来源于stack exchange,提问作者AJDee
相关产品推荐
相关产品推荐

