美文网首页
迭代数组并删除里面元素,而不打破循环

迭代数组并删除里面元素,而不打破循环

作者: 莫威權在B612等着那温柔的风 | 来源:发表于2018-02-27 22:35 被阅读15次

    Review 的时候,发现了下面的问题,我就总结一下发上来了~

    问题的代码简化版

    for (let i = 0; i < locations.length; i++) {
      if (locations[i] === -1) {
        locations.remove(locations[i]); //删除数组里的第 i 个元素
        i = 0;//不得已的办法 有什么更好的解决方法吗 需求是直接更改到locations数组的数据
      }
    }
    

    问题: 实践后不得已重置了计数器i=0,不然会发生跳数的情况,有没有不重置计数器又能达成需求的方法

    解决方法

    发生跳数,是因为删除 item 的时候,导致后面的 item 位置向前移动 1 位了,且索引增加了 1 ,因此跳过了 1 个 item

    解决思路: 直接从后向前进行迭代即可解决,因为删除数组中的 item ,即使后面的 item 前移,也不会导致跳过的问题

    for (let i=locations.length-1; i>=0; i--) {
      if (locations[i] === -1) {
        locations.remove(locations[i]); //删除数组里的第 i 个元素
      }
    }
    

    更多其它的思路,参考这里:

    相关文章

      网友评论

          本文标题:迭代数组并删除里面元素,而不打破循环

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