码迷,mamicode.com
首页 > 编程语言 > 详细

数组循环删除数据时,splice使用注意

时间:2018-05-25 13:40:57      阅读:359      评论:0      收藏:0      [点我收藏+]

标签:mda   item   push   his   复制   就是   解释   spl   变化   

当在循环数组中,删掉某个元素的时候,不要使用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

数组循环删除数据时,splice使用注意

标签:mda   item   push   his   复制   就是   解释   spl   变化   

原文地址:https://www.cnblogs.com/benbendu/p/9087577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!