在我们日常敲代码的时候,常常会用到splice()方法来删除数组中的元素(就是以截取的方式),因为它会直接对数组进行修改。
在使用splice之前,必备条件是,要先有一个数组。
var arr = new Array(1,2,3,4,5); // 初始化一个数组 var deleteNumber = 3; // 要删除的元素 // 遍历数组 for(var i=0; i < arr.length; i++){ if(arr[i] === deleteNumber){ // 如果和要删除的元素相等 var num = arr.splice(i,1); console.log("成功删除" + num) } else { console.log(arr[i] + "未被删除"); } }
可以看到,3已经被成功删除,但是4跑哪去了呢???
前面说过,splice 是直接操作并修改数组的,所以当找到数字3时在循环中的 i 下标是2,而当删除数字3后,数组下标 i 位置中保存的数字变为了数字4,然后到了下一个循环 i 下标为3时,数组下标 i 位置中保存的数字是5,所以跳过了数字4,于是调试信息中没有可爱的数字4。。。原理就是这样子,是不是很绕。
那怎么解决漏掉了数字4这个问题呢???很简单,在使用 splice 的下一句,改一下循环变量值即可。。。
if(arr[i] === deleteNumber){ var num = arr.splice(i,1); //从i位置开始删除一个数字 i = i -1; // 解决方案 }
但是还有一种解决方法就是从后往前遍历,但是本人如果没有条件限制的话更喜欢用forEach进行遍历,所以 i = i -1这种解决方式还是挺方便的。