2

http://jsfiddle.net/4wKuj/8/

  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”?

不应该像其他一样将其删除吗?

谢谢你

4

4 回答 4

5

它能做什么 :

  • 第一次迭代, i=0, 删除"Saab", => 数组是["Volvo","BMW"]
  • 第二次迭代 ,i=1删除,"BMW"因为这是您在 index 处所拥有的1
于 2012-12-01T12:04:04.713 回答
1

第一次拼接后:

i = 1
myarr = ["Volvo", "BMW"]

所以它会删除"BMW". 第二次拼接后:

i = 2
myarr = ["Volvo"]

并且循环不会继续。最好这样做:

while (myarr.length > 1) {
    myarr.splice(0, 1);
}
于 2012-12-01T12:07:40.903 回答
0

在循环之前,您的数组看起来像

[“萨博”、“沃尔沃”、“宝马”]

在循环的第一次迭代后,您删除数组的第一个元素,现在数组看起来像

[“沃尔沃”、“宝马”]

在第二次迭代期间,您的“i”变量具有与数组的第二个元素相对应的“1”(一个)值,换句话说,您说:

删除索引为 '1' 的 ["Volvo","BMW"] 数组元素

于 2012-12-01T12:06:05.080 回答
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也浮现在脑海。

于 2012-12-01T12:13:37.987 回答