JS删除数组对应多个索引值方法

图片描述

    deletTr(){
      let arrLen = this.arrangeP.length;
      for(let i=0;i<arrLen;i++){
        if(this.arrangeP[i].checked){
          this.arrangeP.splice(i,1)
        }else{
          console.log('err')
        } 
      }
    }

现在代码大概意思是拿到this.arrangeP[i].checked为true的,也就是选中的,然后删一条,但是splice删完第一条后,整体数组长度就变了,后面便利删除就有问题了,有没有好办法呢。

阅读 6.2k
7 个回答

用filter过滤

this.arrangeP = this.arrangeP.filter(item => item.checked != true)
deletTr(){
      let arrLen = this.arrangeP.length;
      for(let i=0;i<arrLen;i++){
        if(this.arrangeP[i].checked){
          this.arrangeP.splice(i,1)
          i--
        }else{
          console.log('err')
        } 
      }
    }
this.arrageP = this.arrangeP.filter(item => {
    return !item.checked
})

你找到对应的id再删,而不是根据index删不就解决了,
或者从后删起,不是从前面删起也能解决这个问题
最好是用map循环,现在基本都不用for这些去循坏数组了

deletTr(){
      for(let i=0;i<this.arrangeP.length;i++){
        if(this.arrangeP[i].checked){
          this.arrangeP.splice(i,1);
          i--;
        }else{
          console.log('err')
        } 
      }
    }

只有当数组遍历内操作对数组长度无影响时才做let arrLen = this.arrangeP.length;吧,不要什么情况都用~

反着删? let i=arrLen-1;....

两种方案:

方案1.先把对应项重新赋值为undefined,然后使用数组的filter方法筛序掉该项等于undefined的值,获得一个新数组;
方案2.倒着遍历数组,即从数组最后一项向第一项遍历,进行splice操作
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题