0

我现在正在用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())
}

这也有效!

谁能告诉我这是为什么???以及如何改进循环?

非常感谢,非常感谢您的宝贵时间。

4

3 回答 3

1

您可以通过使用 while 循环轻松做到这一点

while (a2.length > 0)
{
    a1.unshift(a2.shift());
}
于 2013-07-17T11:08:26.370 回答
0

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

如果要使用它的初始值,请预先缓存它:

var n = a2.length;
for (var i = 0; i < n; i++) {
   a1.unshift(a2.shift());
}
于 2013-07-17T10:55:10.983 回答
0

Javascript 数组:Shift() 方法

shift() 方法类似于 pop() 方法,只是它在数组的开头起作用。shift() 方法从给定数组中取出第一个元素并返回它。这会改变调用该方法的数组。

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

于 2013-07-17T10:47:48.647 回答