收藏
回答

双循环多对多,怎么更好处理splice?

function searchDelArr(arr, arr2) { //数组匹配是否存在,删除元素(返回arr数组)
  if (arr) {
    for (var i = arr.length-1; i >= 0; i--) {
      for (var item of arr2) {
        if (arr[i].posttime == item) {
          arr.splice(i, 1)
        }
      }
    }
    return arr
  } else {
    return arr
  }
}

请问上面的splice,如何每次删除了一个数组之后就从头开始循环(如果不从0开始循环则删除一个之后数组下的index就会超出范围),不然一直提示这个问题

最后一次编辑于  2022-01-11
回答关注问题邀请回答
收藏

3 个回答

  • NAMELESS
    NAMELESS
    2022-01-11
      searchDelArr(arr, arr2) {
        if (arr) {
          for (let item of arr2) {
            for (let i = 0; i < arr.length; ++i) {
              if (arr[i].posttime == item) {
                arr.splice(i, 1);
                --i;
              }
            }
          }
          return arr
        } else {
          return arr
        }
      }
    
    2022-01-11
    有用
    回复
  • 困难
    困难
    2022-01-11

    我感觉如果符合if删除后就可以break了?

    删除继续走里面的循环和break到外层继续好像没什么差别,arr[i]实际已经指向下一个元素了,但如果第一个元素就符合删除的话继续走内层会拿到undefined,因为i并没有变但length变了。



    2022-01-11
    有用
    回复 3
  • 凵
    2022-01-11

    第二个for循环下判断arr[i]还存在不,不存在就可以跳过进入下一个·循环了

    2022-01-11
    有用
    回复
登录 后发表内容