反转数组不包含每个元素

时间:2014-08-19 16:13:20

标签: 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]));

3 个答案:

答案 0 :(得分:5)

因为您每次迭代都要修改arrarr.length正在发生变化。试试这个:

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

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

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

或者,您可以使用slicereverse的组合返回输入数组的新的反转副本,而无需修改原始数据:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

或者

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;
}

或只是arr.reverse()