javascript不会拼接数组的所有元素

时间:2012-12-01 12:00:56

标签: javascript arrays

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);

注意:在实际实现中,我不是要清空数组,因此plz不建议其他方法清空数组。

为什么我仍然在控制台日志中看到“volvo”?

它是否应该被删除,与其他相同?

谢谢

4 个答案:

答案 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也会浮现在脑海中。