美文网首页
for循环和for...in 在splice删除元素时的区别

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

作者: 乐宝呗 | 来源:发表于2022-02-16 16:50 被阅读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);

                    }

          }

    }

    }

    相关文章

      网友评论

          本文标题:for循环和for...in 在splice删除元素时的区别

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