我现在在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())
}
这也有效!!!
谁能告诉我为什么会这样? 我怎样才能改善循环?
非常感谢,非常感谢你的时间。
答案 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());
}