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

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 个元素
  }
}

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,126评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,168评论 19 139
  • 荟玩家特邀小编---Z姐 芭提雅 中午我们在淘宝上定的专车从酒店接上我们,一路开到芭提雅的酒店E-outfitti...
    荟玩家阅读 778评论 1 3
  • 七月六日 这里荒芜寸草不生 后来你来这走了一遭 奇迹般万物生长 这里是我的心 这里是我的心, 奇迹般万物生长, 后...
    小王子与玫瑰花_1c6d阅读 163评论 0 1
  • 早上也算是起个大早画的,今天中午一直到下午都有事,但是又不想耽误我的每日一练,于是来个简笔画,画完发现头小身子大,...
    小梅绘生活阅读 814评论 7 28