反向数组不包含所有元素

Reversed array does not contain every element

本文关键字:元素 包含所 数组      更新时间:2023-09-26

为什么我的函数只返回[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,所以arr.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();
}

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

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

或者简写为arr.reverse()

相关文章: