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 个元素
}
}
更多其它的思路,参考这里:
网友评论