反转数组,循环中的pop方法没有弹出到完成

时间:2016-12-29 19:59:53

标签: javascript arrays methods

注意:我现在一直在看代码几个小时,而且我开始质疑每个单词的拼写,或者我是否有阅读障碍 - 我知道这是一个简单的问题

我希望编写一个给定数组的基本函数(不使用标准JavaScript reverse方法),以相反的顺序创建一个具有相同值的新数组。

为什么这个函数写成pop“C”和“B”,而不是“A”?

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

console.log(reverseArray(["A", "B", "C"]));

这应该记录[“C”,“B”,“A”]但是它记录了→[“C”,“B”]当我在函数中记录arr时它保持在“A”。

我通过在for循环之后和返回语句之前添加reversedArr.push(arr.pop(arr[0]));来解决这个问题,但是如果for循环被写为继续而i小于数组长度且数组只包含“A”,长度为1,i为0,不应该弹出“A”吗?

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

当您在数组上执行弹出操作时,它会永久地将该项目从数组中取出并更改其长度。见here

因此,在您的代码中,您应该使用

var popped = arr[i];

进行如下反向迭代:

for (var i = arr.length -1; i>=0 ; i--)

答案 1 :(得分:0)

试试这个,

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

这是如何运作的?

pop不接受参数,只删除最后一个元素,不需要跟踪索引。继续这样做,直到数组为空。