数组的塌陷问题

115 阅读1分钟

数组的塌陷

什么是数组的塌陷呢 假如一个数组var arr = ["a","b","c","d"] 此时你想把数组中的值都删除掉

        var arr = ["a","b","c","d"];
        for(var i=0;i<arr.length;i++){
            arr.splice(i,1);//从1开始删除一个元素
        }

但是我们得到的结果并不是arr=[];而是arr=["b","d"],为什么会导致这样的结果呢?

// 因为i第一次循环,是从1=0开始,但是第一次循环删掉第一项元素后 此时数组变成了arr = ["b","c","d"];
// 所以第二次循环时i=1,再删除时,对应的是删除之后的数组的第二项,也就是"c",所以数组变成["b","d"]
// 到第三次循环时i=2,但这时数组重新是["b","d"],此时i<arr.length不成立,故循环停止。
// 所以执行结果是arr=["b", "d"],而不是[]这个结果。

如何解决这个问题呢? 我们可以在循环的时候加入i--,这样每次i的值就不会变化,永远从第一个数值开始删除,最终我们得到的结果就会变成arr=[];

        var arr = ["a","b","c","d"];
        for(var i=0;i<arr.length;i++){
            arr.splice(i,1);
            i--;
        }