关于for循环与forEach循环

删除数组指定元素

1、直接使用

/*# 删除下标为5的元素 #*/
var arr = [1,1,1,2,2,2,3,3,3]
arr.splice(5,1)
console.log(arr);
// 结果 [1, 1, 1, 2, 2, 3, 3, 3 ]

2、在forEach中使用

/*# 删除指定的元素 forEach遍历 #*/
var arr = [1,1,1,2,2,2,3,3,3];
var val = 1;
arr.forEach((it,i,arr) => {
  if (it == val) {
    arr.splice(i,1);
    i-=1;
  }
}) 
console.log(arr);
// 结果 [1, 2, 2, 2, 3, 3, 3]

我发现这个需要删除的元素1并没有被删除干净,而是留了一个,我调整一下数据再试试

在我改变arr数据之后
var arr = [1,1,1,2,2,2,1,1,3,3,1,3];
// 结果 [1, 2, 2, 2, 1, 3, 3, 3]

只要存在连续的需要被删除的元素,就会保留一个

3、在for循环中使用

/*# 删除指定的元素 for遍历 #*/
var arr = [1,1,1,2,2,2,1,1,3,3,1,3];
var val = 1;
for (let i = 0; i < arr.length; i++) {
  const it = arr[i];
  if (it == val) {
    arr.splice(i,1);
    i-=1
  }
}
console.log(arr);
// 结果 [ 2, 2, 2, 3, 3, 3 ]

用for循环遍历就可以将需要删除的元素删的干干净净

小结

forEach: forEach在遍历时简洁明了,使用起来也非常方便,但是限制也很多。

  1. forEach不能使用break跳出循环
  2. forEach只能默认从索引0开始
  3. forEach底层控制index自增,无法人为控制

所以在forEach遍历删除时就会有删不干净的bug存在,遇到复杂的数组操作时尽量使用for循环,以免遇到奇奇怪怪的bug.
当然因为数组方法繁多,并没有绝对的好与不好,合适的方法才是最好的。

你可能感兴趣的:(javascriptes6前端)