splice遇到的坑

   splice是js中一个很强大的函数,其定义如下:
   splice()的主要用途是向数组的中部插入项,但是使用这种方法的方式又如下三种:
   1:删除:可以删除任意数量的项,只需要指定2个参数:要删除的第一项的位置和要删除的项数,例如:splice(0,2)会删除数组中的前两项
   2:插入:可以向指定位置插入任意数量的项,只需提供三个参数:起始位置,0(要删除的项数)和要插入的项。如果要插入多个项,可以再传入第四、第五,甚至更多的项,例如:
   splice(2,0,"red",","green")会从当前数组的位置2开始插入字符串“red"和"green".
   3:替换:可以向指定位置插入任意数量的项,同时删除任意数量的项,只需指定三个参数:起始位置,要删除的项数和要插入的任意数量的项。插入的项数不必须与删除的项数相等。例如:splice(2,1,"red","green")会删除当前数组位置2的项,然后再从位置2开始插入字符串"red"和"green"。

   虽然知道splice的一些基本用法的定义,但是最后在使用复杂数组的情况的时候,逻辑上还是犯了错误,比如在for循环中使用对数组的splice操作的时候:
   如果想删除一个数组中的奇数项的时候,我选择了这样做:
   var arr = ['red','yellow','blue','green','black','white','purple'];
   for(var i=0;i<arr.length;i++){
       if(i%2==0){
          arr.splice(i,1);
       }
   }
   for(var j=0;j<arr.length;j++){
           console.log(arr[j]);
   }
   但是最后并没有按我预期的输出,只是输出了yellow,blue,black,white

   然后我这样执行之后:
   var arr = ['red','yellow','blue','green','black','white','purple'];
   for(var i=0;i<arr.length;i++){
       if(i%2==0){
           arr.splice(i,1);
           console.log("ddddddddddd");
           for(var j=0;j<arr.length;j++){
               console.log(arr[j]);
           }
       }
   }
 yellow blue green black white purple
 yellow blue black white purple
 yellow blue black white

 说明在进行splice的时候,数组结构已经发生了改变,只要删除一项,后面的项就会自动向前移动,并且改变自身的索引值。。。。

 特此记录一下这个坑,说明对基本的还是只停留在理论上,在实践上并没有进行验证。

 

如果要实现自己想要的效果,提供一种方案,就是首先创建一个新数组,然后将不符合条件的项push进这个新数组,然后用新数组替换旧数组即可

转载于:https://my.oschina.net/sunshinewyf/blog/675180

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值