javascript - 使用 for 循环反转数组

标签 javascript arrays for-loop

快速 JavScript 问题。在下面的代码片段中,我正在反转传递给函数 reverseArray 的数组 arr

在第一段代码中,看起来局部变量 arr 一直在变化,即使在循环中我正在对变量 newArr 进行操作,它保存了初始值arr 的值。因此,当 arr.length 达到值 3 时,循环失败。

function reverseArray (arr) {
    var newArr = [];
    var inArr = arr;
    console.log(inArr);
    for (i = 0; i < arr.length; i++) {      
        newArr[i] = inArr.pop(i);       
    }   
    return newArr;
}
reverseArray(["A", "B", "C", "D", "E", "F"]);

// OUTPUT: ["F", "D", "E"]

另一方面,如果我将 arr.length 存储在局部变量 numArr 上,那么它会完美地工作并反转数组。

function reverseArray (arr) {
    var numArr = arr.length;    
    var newArr = [];    
    for (i = 0; i < numArr; i++) {      
        let inArr = arr;
        newArr[i] = inArr.pop(i);       
    }
    return newArr;
}

reverseArray(["A", "B", "C", "D", "E", "F"]);

// OUTPUT: ["F", "E", "D", "C", "B", "A"]

我错过了什么?

最佳答案

您可以复制数组并使用副本的长度来检查下一个 pop/push 命令。

function reverseArray(array) {
    var newArr = [],
        inArr = array.slice();    // take copy of primitive values

    while (inArr.length) {        // check decrementing length
        newArr.push(inArr.pop());
    }
    return newArr;
}

console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));

要满足条件,您也可以使用 for 语句。

function reverseArray(array) {
    var newArr = [],
        inArr = array.slice();    // take copy of primitive values

    for(; inArr.length; ) {       // check decrementing length
        newArr.push(inArr.pop());
    }
    return newArr;
}

console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));

关于javascript - 使用 for 循环反转数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50999847/

相关文章:

c# - 在 CLR C++ 中用数组初始化 List<T>?

java - 无限循环应用——for(;;)

linux - 读取传递给命令的 cat 文件无法正常工作

php 捕捉 array_push 的魔术方法

javascript - 如何访问谷歌地图事件处理程序中的标记?

javascript - 将 PNG 或 JPEG 用于带有 OpenLayers 的 map (缩放/缩放问题)

javascript - 将数据库格式从 Chrome 转移到 Firefox

java - java中定义一个数组,其元素是对象

python - 当列表中有两个连续相似的数字时,如何打破循环?

javascript - 如何在 React 应用中导入 highcharts 子模块