我问自己:如果在循环进入该阵列时进行了擦除,阵列的安置会怎样?
假设你有一堆排列在数组中的元素。
现在假设您有多个相同的元素,并且想要删除它们。
你正在做一个经典的双循环,当发现一个元素被复制时你就擦掉了它......
在这种情况下你的阵列会发生什么?该元素是否取代了你的擦除元素?元素是否采用空值?
这是一个更好理解的模式(抱歉,我远离艺术家:))
arrayCity = $.makeArray($('.cityName'));
for(i=0; i < arrayCity.length;i++)
{
for(j=0; j < arrayCity.length; j++)
{
if (arrayCity[i].innerHTML == arrayCity[j].innerHTML)
{
arrayCity.splice(j, 1);
}
}
}
继续上去;我被告知在这种情况下反向迭代会更好。但在这种情况下,我的不理解甚至更大;如果擦除,比如你的数组的第一个索引,会发生什么?它会推高整个阵列吗?在这种情况下,你的第一个循环会发生什么......?
这是第二个模式来说明我问题的第二部分(就像第一部分一样丑陋:/我害怕)
我很乐意对这些案件作出一些解释。谢谢你的阅读!
答案 0 :(得分:0)
当您从数组中删除元素时,所有以下元素都会向下移动一个索引。反向循环遍历数组可以防止您跳过元素。例如,如果你有一个数组[1,2,3],你删除索引0处的项目,你的数组将是[2,3]。然后,您将步骤索引1并错过第2项(现在在索引0处)。如果你需要确保你击中每个元素,你可以尝试反向循环或使用Array.proto.forEach()。