Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中循环数组时的奇怪行为_Javascript_Arrays - Fatal编程技术网

在JavaScript中循环数组时的奇怪行为

在JavaScript中循环数组时的奇怪行为,javascript,arrays,Javascript,Arrays,我正在阅读有说服力的Javascript,面对其中一个练习,我发现了一个相当奇怪的行为。(至少对我来说) 本练习要求创建一个函数以反转数组。我想我可以在数组上循环,每次从原始数组中弹出一个项目,并将其推送到最终将返回的临时数组中。 但当我使用for of循环或典型的顺序循环在数组上循环时,最后一项不会被传输 有人能告诉我到底发生了什么吗 const reverseArray = function(array) { let rev = []; for (let x = 0; x <= arr

我正在阅读有说服力的Javascript,面对其中一个练习,我发现了一个相当奇怪的行为。(至少对我来说)

本练习要求创建一个函数以反转数组。我想我可以在数组上循环,每次从原始数组中弹出一个项目,并将其推送到最终将返回的临时数组中。 但当我使用for of循环或典型的顺序循环在数组上循环时,最后一项不会被传输

有人能告诉我到底发生了什么吗

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;xconsole.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"]));