![](https://img.haomeiwen.com/i22989859/5e9b980c28f1109e.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
网友评论