关于javascript:关于for循环与forEach循环

8次阅读

共计 811 个字符,预计需要花费 3 分钟才能阅读完成。

删除数组指定元素

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.
当然因为数组办法繁多,并没有相对的好与不好,适合的办法才是最好的。

正文完
 0