使用filter替代splice删除数组元素失败,求排查问题原因
问题分析与解决方案
嘿,这问题我太熟了,咱们一步一步来捋清楚:
核心原因:filter()和splice()的本质区别
你之前用的splice()是直接修改原数组的方法,找到匹配的索引后,它会直接在this.error_log本身上删除元素,所以你能立刻看到原数组的变化。
但filter()不一样——它是返回新数组的方法,不会碰原数组半根毫毛。你现在只是调用了filter(),但没把它返回的新数组赋值回this.error_log,所以原数组自然纹丝不动,看起来就像“无效”了。
正确的filter()写法
只要把filter()返回的新数组重新赋值给原变量就行,代码改成这样:
this.error_log = this.error_log.filter(error => error.message.info !== message)
额外小提醒:你原来的splice()写法有隐藏坑
顺便说一句,你用map()遍历数组同时调用splice()其实是有风险的——因为splice()会改变数组长度,遍历过程中索引会错乱,可能导致漏删或者删错元素。而filter()完全没这个问题,逻辑更清晰,代码也更简洁,确实是更好的选择~
内容的提问来源于stack exchange,提问作者Jacki
相关产品推荐
相关产品推荐

