當在循環數組中,刪掉某個元素的時候,不要使用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