Javascript Js:为什么移动而不是推?
我想做一个简单的倒计时函数,如果我把10作为参数传递,应该返回一个数组,比如[10,9,8,7,6,5,4,3,2,1] 我认为每次我的参数“n”传入下面的递归函数时,我只需在数组中推送新值“n”。但是这里看起来push方法不合适,它需要unshift方法,如下所示 但是为什么呢?我不懂逻辑 以下:推动n的功能:Javascript Js:为什么移动而不是推?,javascript,push,Javascript,Push,我想做一个简单的倒计时函数,如果我把10作为参数传递,应该返回一个数组,比如[10,9,8,7,6,5,4,3,2,1] 我认为每次我的参数“n”传入下面的递归函数时,我只需在数组中推送新值“n”。但是这里看起来push方法不合适,它需要unshift方法,如下所示 但是为什么呢?我不懂逻辑 以下:推动n的功能: function countdown(n){ if (n < 1) { return [] } let array = [] array = count
function countdown(n){
if (n < 1) {
return []
}
let array = []
array = countdown(n-1)
array.push(n)
return array
}
console.log(countdown(10))
function countdown(n){
if (n < 1) {
return []
}
let array = []
array = countdown(n-1)
array.unshift(n)
return array
}
console.log(countdown(10))
函数倒计时(n){
if(n<1){
返回[]
}
让数组=[]
数组=倒计时(n-1)
array.push(n)
返回数组
}
控制台日志(倒计时(10))
[1,2,3,4,5,6,7,8,9,10]
下面是取消n移位的函数:
function countdown(n){
if (n < 1) {
return []
}
let array = []
array = countdown(n-1)
array.push(n)
return array
}
console.log(countdown(10))
function countdown(n){
if (n < 1) {
return []
}
let array = []
array = countdown(n-1)
array.unshift(n)
return array
}
console.log(countdown(10))
函数倒计时(n){
if(n<1){
返回[]
}
让数组=[]
数组=倒计时(n-1)
数组。取消移位(n)
返回数组
}
控制台日志(倒计时(10))
[10,9,8,7,6,5,4,3,2,1]也许简化递归函数更容易,以表明如果需要更多的值,它将返回一个包含实际值的数组和一个扩展的rest数组 要获得降序数组,需要将larget值取到左侧sinde,将其余值取到右侧。这意味着
push
是错误的,unshift
是正确的
函数倒计时(n){
如果(n<1)返回[]
返回[n,…倒计时(n-1)];
}
控制台日志(倒计时(10))
将push
视为堆栈从左到右的推操作。在这种情况下,它可以简单地将一个元素推到堆栈的顶部(这里的顶部是最右边的元素)
unshift
类似于队列中从左到右的排队函数。这将在队列的末尾(最左侧)添加一个元素,队列的开头将被进一步推到(右侧)。
使用Array.push()
实现的countdown()
,递归函数首先计算所有较小的数组元素(Array=countdown(n-1
)。然后,在递归调用之后,push将n
添加到数组中。因此对于countdown(2)
数组是:
countdown(1).push(2)
由于倒计时(1)
是倒计时(0)。推送(1)
,倒计时(0)
是[]
,我们可以将其扩展到
[].push(1).push(2)
最后看起来像
[]
[1]
[1, 2]
因此,我们可以看到,push
实现在数组的末尾依次附加较大的值
另一方面,将元素添加到数组的开头。因此,按照与前面相同的递归“展开”之后,unshift
实现将依次向数组的前面添加更大的值。countdown(2)
变为countdown(1)。unshift(2)
与[2]基本相同。按(倒计时(1)
。因此输出将完成以下步骤
[]
[1]
[2, 1]
使用push()
,这对您有帮助吗?标准的递归问题,询问和回答了数百次…注意,在递归调用发生后,您正在推送
,关键是:所有递归内容都将继续(当我调用我的函数count-down()时)在返回之前。如果我通过5,它会储存,不知何故:5,4,3,2,1,然后它会被放入数组中,从最后一个结果开始,所以:1,2,3,4,5。如果我使用非移位方法,它会是:1,然后2,1,然后3,2,1等等。如果我这样简化它,可以吗?还是听起来很奇怪?(谢谢)“所有的递归操作都将继续进行(因为我在返回“是的,没错。除了异步函数调用(这里不发生)之外,函数中的代码是自上而下执行的。我还将阅读有关“提升”的内容。”。