数组循环删除数据时,splice使用注意
当在循环数组中,删掉某个元素的时候,不要使用splice方法。
因为splice会使原数组发生变化,而此时数组还处在循环中,所以会出现问题。
例子:
有个数组 formData ,需求:删除formData的itemList中,queId === ‘001’的一项。
我最开始使用的是splice方法,但是报错了:
for(let i = 0; i < this.formData.itemList.length; i++) { let item = this.formData.itemList[i] if (item.queId === '001') { this.formData.itemList.splice(i, 1) } }
遇到有需要循环数组来删除数组数据的情况,这样做:
let formArr = [] for(let i = 0; i < this.formData.itemList.length; i++) { let item = this.formData.itemList[i] if (item.queId !== '001') { formArr .push({...item}) } }
最后得到的formArr 就是删掉那个数据的数组
解释 formArr.push({...item})
这里是{...item}的意思是将item复制了一份,传给formArr,因为之后formArr可能会对item有所操作,如果是直接push item的话,跟之前的item的引用地址是一样的,可能会出现问题。嗯。
注意,这个复制是item只有一层的时候。如果不止一层,需要用cloneDeep
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步