老师,代码为什么显示三个无效呢

老师,代码为什么显示三个无效呢

https://img1.sycdn.imooc.com//climg/624fa49209d4653612170671.jpg

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

<title>数组</title>

</head>

<body>

<script>

    //移除数组arr中所有为'无效'的元素,直接在原数组中进行操作。

        var arr=["有效","无效","有效","无效","无效","有效"];

        for(var i = 0; i < arr.length; i++) {

            if(arr[i] = "无效") {

                arr.splice(i, 1);

            }

        }

        document.write(arr);

</script>

</body>

</html>


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

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

1回答
好帮手慕星星 2022-04-08 11:31:34

同学你好,结果不是三个无效,最后一个是有效:

https://img1.sycdn.imooc.com//climg/624fac440951b2f901990052.jpg

因为if判断中用了一个等号,赋值永远成立。而splice方法会改变原数组的长度

https://img1.sycdn.imooc.com//climg/624fab400959afb603750127.jpg

所以删除的是这三项

https://img1.sycdn.imooc.com//climg/624fab9309f8a75506330065.jpg

建议一个等号改为两个等号,删除一项后,索引的长度减去1,参考:

https://img1.sycdn.imooc.com//climg/624fac8b09a3f9ca05150298.jpg

祝学习愉快!

  • 提问者 dy12369 #1

    麻烦老师解释一下i--的含义

    2022-04-08 14:45:48
  • 好帮手慕星星 回复 提问者 dy12369 #2

    for循环中的i可以看做是数组中的索引,例如当i等于1的时候,删除了“无效”,数组长度减去1,后面的“有效”变为数组中第二位。正常i值会加1,那么就会是arr[2],也就是数组中第三项,跳过了一项。所以删除一项,i值需要减去1 。

    自己再理解下。

    2022-04-08 18:06:28
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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