0

想知道为什么我需要将 4 添加到数组长度以便它反向打印出整个数组?

在我添加 4 之前,它只是使用 .length 属性,它只打印出 6543。

提前致谢!

function reverseArray(array) {
    var newArray =[];

     for(var i = 0; i <= array.length+4; i++) {
         newArray += array.pop(i);
      }
     return newArray;
 }
var numbers = [1,2,3,4,5,6];
console.log(reverseArray(numbers));
4

4 回答 4

5

array.pop 删除(并返回)最后一个元素。这会影响数组的长度。每次迭代都会检查长度,因此由于数组每次都变短,因此循环提前结束。

您可以创建一个循环并弹出项目,直到它为空,但要考虑的另一件事是它是您正在更改的原始数组。我认为如果返回另一个函数,reverseArray则不应更改传递给它的数组。numbers所以更好的解决方案是一个简单的循环,在不修改数组的情况下迭代所有项目。

function reverseArray(array)
{
  var newArray =[];

  for (var i = array.length-1; i >= 0; i--) {
    newArray.push(array[i]);
  }
  return newArray;
}

var numbers = [1,2,3,4,5,6];
console.log(reverseArray(numbers));
console.log(numbers); // Should be unaltered.

如果不介意修改数组,可以使用reverse()数组的方法:

var numbers = [1,2,3,4,5,6];
numbers.reverse();
console.log(numbers);

于 2015-03-30T17:27:33.517 回答
0

在 Javascript 中,pop总是删除数组的最后一个元素。这缩短了长度,这意味着i并且array.length正在收敛。

您可以做一些事情来避免这种行为:

  1. 开始循环时存储原始长度:for (var i = 0 , l = array.length; i < l; i++)
  2. 复制值而不修改原始数组
于 2015-03-30T17:31:10.627 回答
0

当您从数组中删除项目时pop,该项目将从数组中删除。当你增加计数器并减少长度时,它们会在中途相遇,所以你只能得到一半的物品。

用于push将项目放入结果中。如果你使用+=它将产生一个字符串而不是一个数组。

如果您使用pop,那么您可以在数组中剩余任何项目时循环:

function reverseArray(array) {
    var newArray = [];
    while (array.length > 0) {
        newArray.push(array.pop());
    }
    return newArray;
}

您可以通过向后循环保持原始数组不变并将项目添加到新数组中:

function reverseArray(array) {
    var newArray = [];
    for (var i = array.length - 1; i >= 0; i--) {
        newArray.push(array[i]);
    }
    return newArray;
}
于 2015-03-30T17:38:44.440 回答
-1

对相同的输出使用以下方法

函数反向数组(数组){

    var newArray =[];
    var j = array.length-1;

    for(var i = 0; i < array.length; i++)

    {

        newArray[j]= array[i]; j--;

    }

    return newArray;

}

var numbers = [1,2,3,4,5,6];

console.log(reverseArray(numbers));
于 2015-03-30T17:36:34.897 回答