在循环时删除数组的值会发生什么?

时间:2015-07-20 19:54:32

标签: javascript jquery arrays

我问自己:如果在循环进入该阵列时进行了擦除,阵列的安置会怎样?

假设你有一堆排列在数组中的元素。

现在假设您有多个相同的元素,并且想要删除它们。

你正在做一个经典的双循环,当发现一个元素被复制时你就擦掉了它......

在这种情况下你的阵列会发生什么?该元素是否取代了你的擦除元素?元素是否采用空值?

这是一个更好理解的模式(抱歉,我远离艺术家:))

enter image description here

JavaScript代码的实例:

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);
        }
    }
}

继续上去;我被告知在这种情况下反向迭代会更好。但在这种情况下,我的不理解甚至更大;如果擦除,比如你的数组的第一个索引,会发生什么?它会推高整个阵列吗?在这种情况下,你的第一个循环会发生什么......?

这是第二个模式来说明我问题的第二部分(就像第一部分一样丑陋:/我害怕)

enter image description here

我很乐意对这些案件作出一些解释。谢谢你的阅读!

1 个答案:

答案 0 :(得分:0)

当您从数组中删除元素时,所有以下元素都会向下移动一个索引。反向循环遍历数组可以防止您跳过元素。例如,如果你有一个数组[1,2,3],你删除索引0处的项目,你的数组将是[2,3]。然后,您将步骤索引1并错过第2项(现在在索引0处)。如果你需要确保你击中每个元素,你可以尝试反向循环或使用Array.proto.forEach()。