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

但是由于某种原因,控制台返回了数组的第一个值,而不是在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]))

最佳答案

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

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


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


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


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


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

10-08 04:39