在for循环中使用variable.length期间发生了一些奇怪的事情

时间:2013-07-17 10:44:46

标签: javascript for-loop

我现在在javascript中练习一些方法,比如shift(), unshift(), push(), pop(),我想编写一个小函数,它将采用3个参数,一个数组,一个起点,一个终点。用于将数组的一部分切出,然后返回新数组和切割部分。不是有用的东西或大不了,只想练习javascript。

但我遇到了一件奇怪的事情,我不知道为什么。

这是奇怪的部分

var a1 = [];
var a2 = [9,8,7,6,5,4,3,2,1];

for(var i=0; i<a2.length; i++){
a1.unshift(a2.shift())
}

所以我写了这段代码,预期的结果应该是

a1 = [1,2,4,5,6,7,8,9]
a2 = []

然而,当我运行代码时,这就是实际发生的事情

a1 = [5,6,7,8,9]
a2 = [4,3,2,1]

似乎函数循环时间不够,所以我尝试将a2.length更改为整数:9

使代码成为

var a1 = [];
var a2 = [9,8,7,6,5,4,3,2,1];

for(var i=0; i<9; i++){
a1.unshift(a2.shift())
}

这很有效!

然后我改变了这个方法

var a1 = [];
var a2 = [9,8,7,6,5,4,3,2,1]
var aLength = a2.length;
for(var i=0; i<aLength; i++){
a1.unshift(a2.shift())
}

这也有效!!!

谁能告诉我为什么会这样? 我怎样才能改善循环?

非常感谢,非常感谢你的时间。

3 个答案:

答案 0 :(得分:1)

您可以使用while循环

轻松完成此操作
while (a2.length > 0)
{
    a1.unshift(a2.shift());
}

答案 1 :(得分:0)

  

Javascript数组:Shift()方法

     

shift()方法类似于pop()方法,只有它适用于   数组的开头。 shift()方法拉出第一个元素   给定数组并返回它。这改变了数组   方法被称为。

因此,当你执行a2.shift()时,它实际上会修改(减少数组中元素的数量)数组,从而影响效果

答案 2 :(得分:0)

每次迭代都会重新评估循环条件,而a2.length会不断变化。

如果您想使用其初始值,请事先将其缓存:

var n = a2.length;
for (var i = 0; i < n; i++) {
   a1.unshift(a2.shift());
}