var myarr=new Array("Saab","Volvo","BMW");
console.log(myarr);
for (var i=0; i<myarr.length; i++) {
myarr.splice(i,1);
}
console.log(myarr);
注意:在实际实现中,我不是要清空数组,因此plz不建议其他方法清空数组。
为什么我仍然在控制台日志中看到“volvo”?
它是否应该被删除,与其他相同?
谢谢
答案 0 :(得分:5)
它的作用:
i=0
,删除"Saab"
,=&gt;数组是["Volvo","BMW"]
i=1
,删除"BMW"
,因为这是索引1
答案 1 :(得分:1)
第一次拼接后:
i = 1
myarr = ["Volvo", "BMW"]
因此它将删除"BMW"
。第二次拼接后:
i = 2
myarr = ["Volvo"]
循环不会继续。最好这样做:
while (myarr.length > 1) {
myarr.splice(0, 1);
}
答案 2 :(得分:0)
在循环之前,您的数组看起来像
[ “萨伯”, “沃尔沃”, “BMW”]
在第一次循环迭代后,删除数组的第一个元素,现在数组看起来像
[ “沃尔沃”, “BMW”]
在第二次迭代期间,你的“i”变量有'1'(一个)值,对应于数组的第二个元素,换句话说你说:
删除[“Volvo”,“BMW”]数组元素,索引为“1”
答案 3 :(得分:0)
如果从数组中删除项目,还需要调整索引值f.ex:
var myarr=new Array("Saab","Volvo","BMW");
for (var i=0; i<myarr.length; i++) {
myarr.splice(i--,1);
}
提示:如果您使用循环从数组中删除项目的值,您可以使用其他方法,f .ex Array.filter
:
myarr = myarr.filter(function(val) {
return val !== 'Volvo'
});
Array.indexOf
也会浮现在脑海中。