美文网首页
在循环体内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