Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用JavaScript中的for循环将堆栈的所有元素推入另一个堆栈_Javascript_Arrays_For Loop_Foreach_Stack - Fatal编程技术网

无法使用JavaScript中的for循环将堆栈的所有元素推入另一个堆栈

无法使用JavaScript中的for循环将堆栈的所有元素推入另一个堆栈,javascript,arrays,for-loop,foreach,stack,Javascript,Arrays,For Loop,Foreach,Stack,我在HackerRank上练习数据结构,我遇到了一个问题,它说使用两个堆栈实现队列,所以我查找了它,理解了逻辑,它非常简单,而且 就像 :使两个堆栈排队和退队 :对于排队操作,排队堆栈中的push元素 :对于出列操作-首先检查出列堆栈是否为空,如果为空,则从出列堆栈中弹出所有元素,并将其推入出列堆栈中,以便完全反转出列,现在我们可以从出列堆栈中弹出顶部以执行出列操作(返回队列的前部) :如果出列堆栈不是空的,则从队列前面的同一个stcak中弹出。 下面是一个for循环的示例,它传输排队堆栈的所有

我在HackerRank上练习数据结构,我遇到了一个问题,它说使用两个堆栈实现队列,所以我查找了它,理解了逻辑,它非常简单,而且 就像 :使两个堆栈排队和退队 :对于排队操作,排队堆栈中的push元素 :对于出列操作-首先检查出列堆栈是否为空,如果为空,则从出列堆栈中弹出所有元素,并将其推入出列堆栈中,以便完全反转出列,现在我们可以从出列堆栈中弹出顶部以执行出列操作(返回队列的前部) :如果出列堆栈不是空的,则从队列前面的同一个stcak中弹出。 下面是一个for循环的示例,它传输排队堆栈的所有内容,并使用push和pop操作将它们放入出列堆栈,但for循环的行为异常

let enqueueStack  = [1,2,3,4,5,6]
let dequeueStack = [];
for(let i=0;i<enqueueStack.length;i++){
    dequeueStack.push(enqueueStack.pop())
}
console.log(enqueueStack)
console.log(dequeueStack
我试过forEach,但也不起作用

while(enqueueStack.length > 0) {
    dequeueStack.push(enqueueStack.pop())
}

var elementNumber=enqueueStack.length;

对于(设i=0;i,使用pop函数可以减少排队堆栈的长度,因此,您应该立即分配该长度并向后迭代,而不是每次要比较时都查询该长度

let enqueueStack=[1,2,3,4,5,6]
让dequeueStack=[];
for(设i=enqueueStack.length-1;i>=0;i--){
push(enqueueStack.pop())
}
console.log(排队堆栈)

console.log(dequeueStack)
问题是关于循环操作中的副作用。当您检查
enqueueStack.length
时,它会随着您执行的
pop()
操作而更改。 您可以通过记录长度值来注意:

let enqueueStack=[1,2,3,4,5,6]
让dequeueStack=[];

for(让i=0;i作为while循环的完美示例!当弹出元素时,您的排队堆栈的长度会发生变化。但是您并不真正关心长度,仅仅是因为排队堆栈是否有更多的元素

let enqueueStack=[1,2,3,4,5,6]
让dequeueStack=[];
while(enqueueStack.length){
push(enqueueStack.pop())
}
console.log(排队堆栈)

console.log(dequeueStack)
这是因为当您开始从排队数组中弹出项目时,计数会减少,在弹出3个项目(即6,5,4)后,排队堆栈长度是3,i的值也是3。因此它会在3个元素处停止

let enqueueStack=[1,2,3,4,5,6]
让dequeueStack=[];
设arrayLength=enqueueStack.length
对于(设i=0;iHint:
enqueueStack.pop()
makes
enqueueStack.length
down)。
while(enqueueStack.length > 0) {
    dequeueStack.push(enqueueStack.pop())
}
var elementNumber = enqueueStack.length;
for(let i=0;i<elementNumberi++){
    dequeueStack.push(enqueueStack.pop())
}