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);
注意:在实际实现中,我并没有尝试清空数组,所以请不要建议其他清空数组的方法。
为什么我仍然在控制台日志中看到“volvo”?
不应该像其他一样将其删除吗?
谢谢你
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);
注意:在实际实现中,我并没有尝试清空数组,所以请不要建议其他清空数组的方法。
为什么我仍然在控制台日志中看到“volvo”?
不应该像其他一样将其删除吗?
谢谢你
它能做什么 :
i=0
, 删除"Saab"
, => 数组是["Volvo","BMW"]
i=1
删除,"BMW"
因为这是您在 index 处所拥有的1
第一次拼接后:
i = 1
myarr = ["Volvo", "BMW"]
所以它会删除"BMW"
. 第二次拼接后:
i = 2
myarr = ["Volvo"]
并且循环不会继续。最好这样做:
while (myarr.length > 1) {
myarr.splice(0, 1);
}
在循环之前,您的数组看起来像
[“萨博”、“沃尔沃”、“宝马”]
在循环的第一次迭代后,您删除数组的第一个元素,现在数组看起来像
[“沃尔沃”、“宝马”]
在第二次迭代期间,您的“i”变量具有与数组的第二个元素相对应的“1”(一个)值,换句话说,您说:
删除索引为 '1' 的 ["Volvo","BMW"] 数组元素
如果从数组中删除一个项目,还需要调整索引值,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
也浮现在脑海。