for循环和for...in 在splice删除元素时的区别

2022-02-16  本文已影响0人  乐宝呗

场景: 列表的全选和取消全选操作,如下图所示

图1

例如:当在左边列表全选后,又在右边列表删除几个选中项后,再次再左边点击全选 又点击取消全选时出现了一个问题。

var selectAll = function(){

if (!isAll) {

// 取消全选操作需左边check 设置为false,并删除右边列表中数据

// 这个for循环删除会有问题,因为下标问题,后面的元素会跳过去一个下标,导致删除不全或删错

for (var i = 0, l = list.length; i < l; i++) {

       list[i].check = false;

       for (var i2 = 0; i2 < selectList.length; i2++) {

                 if (list[i].id === selectList[i2].id) {

                          selectList.splice(i2, 1);

 // 解决办法一:这里加一行代码 i2 = i2-1

 //  注意 这里的 selectList 长度是变化着的,不能写成 for (var i2 = 0, l2 = selectList.length; i2 < l2; i2++) 

                  }

         }

}

// 解决办法二:换成 for...in  删除

for (var i in list) {

      list[i].check = false;

      for (var i2 in selectList) {

              if (list[i].id === selectList[i2].id) {

                       selectList.splice(i2, 1);

                }

      }

}

}

上一篇 下一篇

猜你喜欢

热点阅读