请老师看下

请老师看下

 var arr=["有效","无效","有效","无效","无效","有效"];
        for(var i=0;i<arr.length;i++){
            if(arr[i]=='无效'){
                arr.splice(i,i)
            }
        }
        console.log(arr)

是这样子吗,老师,这里的arr.splice(i,i)比如说i的参数是【1】,那是不是这里的arr.splice其实是

["有效","无效"]

因为遍历到这里位置。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2022-05-16 10:06:52

同学你好,代码效果实现是对的,针对同学的问题解答如下:

理解有误,arr指的是整个数组,与遍历到哪里无关,当i值为1时,满足arr[i] == '无效' 这个条件,执行arr.splice(i,i),此时的arr值为["有效","无效","有效","无效","无效","有效"]。即:["有效","无效","有效","无效","无效","有效"].splice(1,1) 从数组索引为1的位置删除1个元素, 删除元素后的数组arr值为 ["有效","有效","无效","无效","有效"]

祝学习愉快~

  • 提问者 慕仙7313728 #1

    那老师我这里设置的是arr.splice(i,i),是不是因该改成arr.splice(i,1)比较合理?

    但是我不明白我当时设置的是arr.splice(i,i)如果i变成2后那不是arr.splice(2,2)这样子了吗?

    2022-05-16 11:27:09
  • 同学你好, 对于你的问题解答如下:

    1、代码实现是比较灵活的,针对本题效果,两种方式都是可以的,但是考虑代码灵活适用性的话,那么改成改成arr.splice(i,1)会更好。

    不过这里有个小细节需要注意,改成改成arr.splice(i,1),需要针对i进行减一操作,如下:

    https://img1.sycdn.imooc.com//climg/6281c78e090a223808600281.jpg

    因为,splice方法会改变原数组长度,如果符合if判断,数组长度就会减去1,所以索引也需要跟着减去1,否则会跳过一项。例如:第一个‘无效’去掉后

    https://img1.sycdn.imooc.com//climg/6281c7c6092b94f508230281.jpg

    后面的‘有效’索引会变为1,而当前索引为2,所以需要减去1 。

    2、结合老师第一次的回答,如下:

    https://img1.sycdn.imooc.com//climg/6281c80809f6e3f208100149.jpg

    删除元素后的数组为:["有效","有效","无效","无效","有效"],当i值为2时,arr[2]值为无效,满足if条件,执行arr.splice(2,2),从数组索引为2的位置删除2个元素,原数组中刚好连着两个都是无效,所以得到的结果为["有效","有效","有效"]

    祝学习愉快~

    2022-05-16 11:46:14
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师