对反转数组感到困惑

时间:2018-07-10 01:04:09

标签: javascript arrays loops

我想反转输入到函数中的数组。

但是由于某种原因,控制台返回了数组的第一个值,而不是在while循环中获取完整的数组,因此控制台可以将值从末尾移到最前面,然后删除相同的值。

function littleWHEW(lemonade) {
  let i = lemonade.length - 1;
  while (i >= 0) {     
    lemonade.unshift(lemonade[i])
    lemonade.pop(lemonade[i])
    i = i - 1
  }
  return lemonade
}

console.info(littleWHEW([1,2,3,4,5]))

2 个答案:

答案 0 :(得分:1)

只需使用

reverse()

方法:

function littleWHEW(lemonade) {
   return lemonade.reverse();
}

顺便说一句,您不应该在pop()方法中添加参数。

答案 1 :(得分:0)

自从您要求解释以来,让我们进行深入调查。在开始之前,请先看一下 unshiftpop

首先i = 4。这是一个循环中发生的事情:

  1. [1,2,3,4,5]是原始数组。 lemonade.unshift(lemonade[i])将一个元素添加到lemonade的第一位置。此时i = 4,因此lemonade[4] = 5,我们有了[5,1,2,3,4,5](请注意粗体字)。
  2. 现在pop是您的最后一个。 [5,1,2,3,4,5]成为[5,1,2,3,4]
  3. 您减少了i

现在i = 3,这是第二个循环中发生的事情:

  1. [5,1,2,3,4]是原始数组。 lemonade.unshift(lemonade[i])将一个元素添加到lemonade的第一位置。此时i = 3,因此lemonade[3] = 3,我们有了[3,5,1,2,3,4](请注意粗体字)。
  2. 现在pop是您的最后一个。 [3,5,1,2,3,4]成为[3,5,1,2,3]
  3. 您减少了i

一个循环之后,您的i并没有按预期指向最后一个元素,并且使事情出错(如第二个循环一样)。