Javascript 反向数组不包含所有元素

Javascript 反向数组不包含所有元素,javascript,web,computer-science,Javascript,Web,Computer Science,为什么我的函数只返回[3,2,]。它也应该打印出元素1 function reverseArr(arr) { var reverse = []; for (var i = 0; i < arr.length; i++) reverse.push(arr.pop()); return reverse; } console.log(reverseArr([1, 2, 3])); 功能反转器(arr){ var反向=[]; 对于(变量i=0;i

为什么我的函数只返回[3,2,]。它也应该打印出元素1

function reverseArr(arr) {
    var reverse = [];
    for (var i = 0; i < arr.length; i++)
        reverse.push(arr.pop());
    return reverse;
}

console.log(reverseArr([1, 2, 3]));
功能反转器(arr){
var反向=[];
对于(变量i=0;i
因为每次迭代都在修改
arr
arr.length
在变化。请尝试以下方法:

function reverseArr(arr) {
    var reverse = [], len = arr.length;
    for (var i = 0; i < len; i++)
        reverse.push(arr.pop());
    return reverse;
}
或者,您可以使用和的组合返回输入数组的新的反向副本,而无需修改原始副本:

function reverseArr(arr) {
    return arr.slice().reverse();
}

问题是,当你弹出数组时,你正在改变数组的长度。所以
arr.length
从3开始,然后是2,然后是1。相反,您可以这样做:

function reverseArr(arr) {
    var reverse = [];
    while (arr.length) {
        reverse.push(arr.pop());
    }
    return reverse;
}

功能反转器(arr){
var反向=[];
对于(变量i=0;i
或者干脆
arr.reverse()。
function reverseArr(arr) {
    var reverse = [];
    while (arr.length) {
        reverse.push(arr.pop());
    }
    return reverse;
}
function reverseArr(arr) {
    var reverse = [];
    while (arr.length > 0)
        reverse.push(arr.pop());
    return reverse;
}
function reverseArr(arr) {
    var reverse = [];
    for (var i = 0; i < arr.length; i++)
        reverse.push(arr[arr.length - 1 - i]);
    return reverse;
}