数组循环删除某元素 不能从0开始遍历

参考http://singsing.io/blog/fcc/basic-seek-and-destroy/#comments

在做这题的时候,用的方法一,最基本的解法,循环遍历删除,但是总是不对,后来看解答才焕然大悟

平时写循环,我们都习惯从 0 开始遍历。但有时候,如果从 0 开始遍历是会出错的。
原因很简单,如果我们删除了某一个元素,那么在这之后的所有元素的 index 都会减一。然后我们通过 i++ 来进入下一次循环,相当于跳过了一个元素

function destroyer(arr) {
// 先把 arguments 转换为数组
    var arg = [].slice.call(arguments);
// 保存下来第一个参数,就是要操作的数组
   var sourceArr = arg[0];
// 后续的参数均为需要删除的数字,我们也把这些数字放到一个数组里

    var refArr = arg.slice(1);
// 可以思考一下,这里为什么不能从 0 开始遍历
for (var i = sourceArr.length - 1; i >= 0; i--) {
    // 如果当前的元素存在于 refArr 中,就把它删掉
    if (refArr.indexOf(sourceArr[i]) > -1) {
        sourceArr.splice(i, 1);
    }
}
return sourceArr;
}

你可能感兴趣的:(数组循环删除某元素 不能从0开始遍历)