循环数组中splice删除问题

442 阅读1分钟

在循环中去删除,会出现应被删除的数据残留没有被删除成功的情况 list 为一数组


data.forEach(element => {
     let m = list.findIndex((item: any) =>
       item.name === element.name
     )   
       list.splice(m, 1)
     });

原因在于splice 会改变原本数组的长度 ,也就是变角标所指向的内容。原来符合条件的index, 后面splice之后被改变了,所以没有删掉。

data.forEach(element => {
      let m = list.findIndex((item: any) =>
        item.name === element.name
      )
      while (list.indexOf(list[m]) !== -1) {
        list.splice(m, 1)
      }
      });

在vue里面虽然splice是响应式的,但是不建议与forEach连用,一般来讲forEach无法中断遍历,当需要过滤数据的时候还是采用filter比较好,需要修饰数组(不删减数组)的时候采用map遍历比较好。