js循环问题

为什么这两种循环得到的结果是不一样的
一个结果是1,4,一个是1,3,4

var a = [1,2,3,4];
var b = [2,3];
function removePointById(arr1,arr2){
    for(let i = 0; i < arr2.length; i++){
        for(let j = 0; j < arr1.length; j++){
            if(arr2[i]== arr1[j]){
                let indexs = arr1.indexOf(arr1[j]);
                arr1.splice(indexs, 1);
            }
        }
    }
    return arr1
},

console.log(removePointById(a,b))// 1,4
var a = [1,2,3,4];
var b = [2,3];
a.forEach((item,index)=>{
    b.forEach((itx,idx)=>{
        if(item == itx) {
            a.splice(index,1);
        }
    })
})

console.log(a); // 1,3,4
阅读 1.3k
1 个回答

永远不要在forEach里面 splice或者减少 数组长度,因为 forEach 函数中最开始已经确定长度了,虽然代码最终没有出错。

比方说 forEach 的游标已经到了第二个,但是你把第二个删除,第三个变为第二个,所以forEach游标继续走,到第三个,所以之前的第三个现在的第二个会被遗漏。
forEach的意思是遍历,不建议修改可以使用函数 filter 过滤 返回 判断,如果非要forEach,建议新增一个数组 push。

filter:

var a = [1,2,3,4];
var b = [2,3];
var c = a.filter((item,index)=> !b.includes(item))
console.log(c)

foreach:

var a = [1,2,3,4];
var b = [2,3];
var c = []
a.forEach((item,index)=>{
    if(!b.includes(item)) {
          c.push(item)
     }
})
console.log(c)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题