使用forEach删除数组里的多个内容的时候出错了

var arr=['你','好','吗'];

arr.forEach((res,key)=>{

if(res=='你'){

    res.splice(key,1);

}

})

结果报错了。不能用res来表示啊。

然后我就改成了

var arr=['你','好','吗'];

arr.forEach((res,key)=>{

   if(res=='你'){

    arr.splice(key,1);

  }

})

console.log(arr)

这样就没错了。因此我们知道我们想删除这个数组里的任何一个元素是可行的。但是如果我同时想删除多个呢?。

var arr=['你','好','吗'];

arr.forEach((res,key)=>{

   //console.log(arr)  //标记1

//console.log(key)//标记3

   if(res=='你'||res=='好'){

      //console.log(key)   //标记2

      arr.splice(key,1);

  }

})

console.log(arr)

结果打印的是:arr的结果是['好','吗']。显然和我们想要的结果不一样。

我们在标记1的地方打印的是

在标记3的地方打印的是

在标记2的地方打印的是一个0. 也就说只有一个满足这个条件

 

也就是说第一次splice删除了内容之后的第二次循环已经是删除之后的arr数组了。但是他的key依然是走的1.

接下来我们分析一下:

  1.       你第一次走的是下标key=0.判断条件满足。删除arr里面下标是0的元素-‘你’;
  2.       然后这时arr=['好','吗']。再走下标key=1.arr[1]不满足条件。并且长度已经走完。就结束了。

 

以此我们可以看出来:

这个key值按顺序走的0,1,2。。。你里面不管做什么操作,他都是走完0.下一次走1.只是长度会因为你的删除内容而减少。

 

那我又想了。我删除一个元素一个让他的key-1.然后他不就又从新循环那个数组了吗?

var arr=['你','好','吗','啦'];

arr.forEach((res,key)=>{

console.log('外面打印的'+key)

   if(res=='你'||res=='好'){

      console.log('里面打印的'+key)  

      arr.splice(key,1);

      key--;

  }

})

console.log(arr)

使用forEach删除数组里的多个内容的时候出错了_第1张图片

 可以看出来不管我里面做了什么外面的那个key都是自己再走0,1,2.即使里面写了key--。他依然不为所动。

而里面在第一个元素'你'满足条件。走了删除。其他的没有走。

从这里我们可以得出:

forEach循环时的下标并不会被循环体内操作修改。

为了验证这个我们又写了一个例子:

var arr=['你','好','吗'];

arr.forEach((res,key)=>{

    console.log(key)

    key=key+3; //在这里我想要改变上面的key的值

    console.log("我是增加以后的"+key)

})

使用forEach删除数组里的多个内容的时候出错了_第2张图片

但是可以看到第一次打印的key实际上并没有受到我下面的key+3的影响依然是输出的。0.1.2.

 

真正的删除数组里的多个元素,显然是不能用forEach循环修改的。我们可以用for循环修改。参考https://blog.csdn.net/qq_33769914/article/details/90232564?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159990513619725264608078%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=159990513619725264608078&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_blog_default-2-90232564.pc_v2_rank_blog_default&utm_term=%E5%88%A0%E9%99%A4%E6%95%B0%E7%BB%84&spm=1018.2118.3001.4187

 

你可能感兴趣的:(js)