美文网首页
在循环体内splice删除数组存在残留数据(个人笔记)

在循环体内splice删除数组存在残留数据(个人笔记)

作者: kevision | 来源:发表于2021-09-08 21:46 被阅读0次
image.png

取消全选的时候,下面的框里面应该去掉选中的三个。一开始做法:

this.checkedList.map(i => {
      this.tags.map((j, index) => {
          if(i.staffNo===j.staffNo) {
              this.tags.splice(index, 1)
          })
      })     
})

执行后发现这三个并没有完全删除,与想要的结果不符。原因是:

splice 会改变原本数组的长度 ,也就是变角标所指向的内容。原来符合条件的index, 后面splice之后被改变了,所以没有删掉。

解决办法:

在循环前新建一个临时数组 用于存储要保留的内容,只要把需要的内容push到临时数组,这是需要筛选的数组长度内容角标等都不会被改变

let newArr = []
let tagsArr = this.checkedList.map(i => i.staffNo)
this.tags.map(i => {
      if(!tagsArr.includes(i.staffNo)) {
          newArr.push(i)
      }
})
this.tags = newArr

相关文章

网友评论

      本文标题:在循环体内splice删除数组存在残留数据(个人笔记)

      本文链接:https://www.haomeiwen.com/subject/uuxywltx.html