请老师帮忙检查一下代码
来源:4-3 编程练习
Niklause
2021-07-19 09:26:46
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数组</title>
</head>
<body>
<script>
var arr=["有效","无效","有效","无效","无效","有效"];
// 补充代码
for(var i=0;i<arr.length;i++){
if(arr[i]=="无效"){
arr.splice(i,1);
arr[i]=arr[i-1];
}
}
document.write(arr);
</script>
</body>
</html>
问题描述:
老师,为什么会有四个有效,一直不太明白。请老师解答一下。
尝试过的解决方式:
在if外面加一句arr.pop(),结果又变成两个有效。
1回答
好帮手慕久久
2021-07-19
同学你好,代码不对。可以通过分析代码运行过程,得到为什么打印4个“有效”:
i=0时,arr[0]是“有效”,不执行if中的代码,然后i++;
i=1时,arr[1]是无效,执行if中的代码。arr.splice(1,1)表示删除索引是1的元素,此时arr变成["有效","有效","无效","无效","有效"](删除操作会改变arr):
而arr[i]=arr[i-1]就是arr[1]=arr[0],该句代码的意思是将索引是1的元素改成索引时0的元素:
由于arr[1]和arr[0]的值一样,所以if语句执行完后,arr还是["有效","有效","无效","无效","有效"]。
i=2时,["有效","有效","无效","无效","有效"]的索引2位置,是“无效”,满足if条件,索引2元素会被删除,arr变成
["有效","有效","无效","有效"]:
再执行 arr[2]=arr[1],会把["有效","有效","无效","有效"]中的索引2元素,换成索引1元素:
所以最后有4个有效。
而使用pop的结果,同学也可以像上面一样,通过逐步分析获取原因。
本练习实现,可参考如下:
其中,之所以要修正i是因为arr删除元素后,元素会重排,删除元素后面的元素会前移一位,索引会减1。以i=1为例,由于arr[1]会被删除,所以1后面的元素索引会由2变成1:
如果不修正i,i++后会变成2,会漏掉一个元素:
祝学习愉快!
相似问题