反转数组不包含每个元素

DEd*_*s57 4 javascript computer-science web

为什么我的函数只返回[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]));
Run Code Online (Sandbox Code Playgroud)

p.s*_*w.g 5

因为您在arr每次迭代时arr.length都在修改,所以正在改变.试试这个:

function reverseArr(arr) {
    var reverse = [], len = arr.length;
    for (var i = 0; i < len; i++)
        reverse.push(arr.pop());
    return reverse;
}
Run Code Online (Sandbox Code Playgroud)

但请注意,这将修改原始数组,这可能与您的意图不同.如果您想保留原始数组,请unshift改用:

function reverseArr(arr) {
    var reverse = [], len = arr.length;
    for (var i = 0; i < len; i++)
        reverse.unshift(arr[i]);
    return reverse;
}
Run Code Online (Sandbox Code Playgroud)

或者,你可以使用的组合slice,并reverse在不修改原始返回输入数组的一个新的,颠倒的副本:

function reverseArr(arr) {
    return arr.slice().reverse();
}
Run Code Online (Sandbox Code Playgroud)