在JavaScript中循环数组时的奇怪行为
我正在阅读有说服力的Javascript,面对其中一个练习,我发现了一个相当奇怪的行为。(至少对我来说) 本练习要求创建一个函数以反转数组。我想我可以在数组上循环,每次从原始数组中弹出一个项目,并将其推送到最终将返回的临时数组中。 但当我使用for of循环或典型的顺序循环在数组上循环时,最后一项不会被传输 有人能告诉我到底发生了什么吗在JavaScript中循环数组时的奇怪行为,javascript,arrays,Javascript,Arrays,我正在阅读有说服力的Javascript,面对其中一个练习,我发现了一个相当奇怪的行为。(至少对我来说) 本练习要求创建一个函数以反转数组。我想我可以在数组上循环,每次从原始数组中弹出一个项目,并将其推送到最终将返回的临时数组中。 但当我使用for of循环或典型的顺序循环在数组上循环时,最后一项不会被传输 有人能告诉我到底发生了什么吗 const reverseArray = function(array) { let rev = []; for (let x = 0; x <= arr
const reverseArray = function(array) {
let rev = [];
for (let x = 0; x <= array.length; x++) {
rev.push(array.pop());
console.log(rev, array)
}
return rev;
};
console.log(reverseArray(["A", "B", "C"]));
当pop()
应用于array
时,它会减少array
的长度,因此当循环运行时,它会发现比前一个数组长度少一个项。因此,您只需在变量中指定数组的长度,并在for
循环的比较中使用该长度:
let rev=[];
const reverseArray=函数(数组){
var length=array.length;
for(设x=0;x console.log(reversearlay([“A”、“B”、“C]”))代码>尝试使用while循环而不是for循环
const reverseArray = function(array){
let rev = [];
while (array.length>0)
{
rev.push(array.pop());
}
return rev;
};
console.log(reverseArray(["A", "B", "C"]));
当该方法从数组中删除弹出项时,使用while
循环而不是for
let rev=[];
const reverseArray=函数(数组){
while(array.length>0){//或just“(array.length)”
rev.push(array.pop());
}
返回版本;
}
console.log(reversearlay([“A”、“B”、“C]”))代码>我给你放了两个版本reverse
将在不修改原始阵列的情况下反转阵列reverseModify
将执行相同的操作,但清空原始数组
选择更适合您的版本
const arr=[1,2,3,4];
函数反转(数组){
让结果=[];
for(设i=array.length-1;i>=0;i--){
结果:push(数组[i]);
}
返回结果;
}
函数反向emodify(数组){
让结果=[];
while(array.length){
result.push(array.pop());
}
返回结果;
}
控制台日志(反向(arr),arr);
控制台日志(反向修改(arr),arr)代码>问题分为两个独立的操作
迭代所有元素,通常取长度并执行循环
pop
a值并推送该值。这是获取最后一个
项并将其推送到新数组末尾的机制
迭代部分只需要实际长度和倒计时(按pop
)到零,然后退出循环
对于递增计数,您需要两个变量,一个用于计数器,另一个用于数组的结束或长度,这是一个静态值,取自给定数组,该数组稍后会发生变化
函数反向数组(数组){
var rev=[];
while(array.length){
rev.push(array.pop());
}
返回版本;
}
console.log(reversearlay([“A”、“B”、“C]”))代码>该方法删除数组的最后一个元素,并返回该元素。它更改数组的长度
const popArray=函数(数组){
对于(让x=0;x非常感谢!现在我明白了。在使用I时,您还应该注意“关闭一个bug”(obobob)
const reverseArray = function(array){
let rev = [];
while (array.length>0)
{
rev.push(array.pop());
}
return rev;
};
console.log(reverseArray(["A", "B", "C"]));