JavaScript堆栈、后进先出堆栈:值不符合预期
我有以下代码JavaScript堆栈、后进先出堆栈:值不符合预期,javascript,stack,Javascript,Stack,我有以下代码 var stackMapIn = []; var stackMapOut = []; var stackBack = []; stackMapOut.push("m1"); $scope.clickLinks = function(initialOut,initialIn,extra,backIn,backOut,name){ $('div#'+initialOut+'Map,'+extra).fadeOut('slow',function(
var stackMapIn = [];
var stackMapOut = [];
var stackBack = [];
stackMapOut.push("m1");
$scope.clickLinks = function(initialOut,initialIn,extra,backIn,backOut,name){
$('div#'+initialOut+'Map,'+extra).fadeOut('slow',function(){
$('.'+initialOut+'Details,.bkbtn'+backOut).css("display","none");
$('.'+initialIn+'Details,.bkbtn'+backIn).css("display","block");
$('.noQuery').css("display","none");
$("#buildingHeader").html(name);
$('div#'+initialIn+'Map').fadeIn('slow');
})
stackMapOut.push(initialIn);
stackMapIn.push(initialOut);
stackBack.push(backIn);
}
$scope.clickBack = function(bkbtnCheck){
alert(stackBack[0]);
mapOut = stackMapOut.pop();
mapIn = stackMapIn.pop();
stackBack.pop();
backIn = stackBack[0];
alert(backIn);
$('div#'+mapOut+'Map').fadeOut('slow',function(){
$('.'+ mapOut + 'Details,.bkbtn').css("display", "none");
$('.' + mapIn + 'Details,.bkbtn'+backIn).css("display", "block");
$(".noQuery").css("display","none");
$("#buildingHeader").html("Name");
$('div#' + mapIn + 'Map').fadeIn('slow');
})
}
现在,我将对代码运行时发生的情况进行一次快速运行
首次运行clickLinks时:
初始值='m2'
initialOut='m1'
后退=‘家’
clickBack尚未运行
第二次运行clickLinks时:
初始值='m7'
initialOut='m2'
后退='CentralPortfolio'
好的,在这一点上,事情应该是这样的(我期望):
stackMapOut=['m1','m2','m7']
stackMapIn=['m1','m2']
stackback=['Home','CentralPortfolio']
现在我们运行clickBack。。。为什么警报输出“Home”
我想做的是,当点击链接运行时,我有一系列的东西出现和消失。有时,用户可以运行clickBack以返回到以前的状态(状态)。因此,我使用JavaScript堆栈来跟踪它处于什么状态以及需要返回的位置
问题是,我可以运行clickLinks一次,连续单击Back一次,没有问题。我甚至可以第二次运行clickLinks,但仍然可以单击后退按钮两次(返回开始),而不会出现问题。但是我仍然不明白为什么此时stackBack[0](哪一个应该是堆栈的顶部?=“Home”,而不是“CentralPortfolio”
因为我现在遇到的真正问题是如果我第三次运行clickLinks:stillstackBack[0]=“Home”(此时我希望它是“CentralCampus”),因此,显示的是“Home”back按钮(同时根据mapOut和mapIn显示正确的其他内容)而不是显示中央Portfolio的后退按钮;因为我在使用“CentralCampus”之前已经“弹出”了
请,如果需要任何其他信息或您需要更多的澄清,让我知道。我尽我所能提供任何需要的信息,并尽可能清楚地表达出来 现在我们运行clickBack。。。为什么警报输出“Home”?` 因为
stackBack[0]
是Home
。你希望它做什么?你的问题中甚至有:
stackback = ['Home','CentralPortfolio']
索引0
是数组中的第一个元素,即Home
。最后一个元素是stackBack[stackBack.length-1]
使用JavaScript堆栈
不,您使用的是javascript数组,但使用它就像使用堆栈一样。除非你像数组一样对它进行索引——这是你困惑的根源。您可以将其作为堆栈与pop
和push
一起使用,但不要尝试使用[]
对其进行索引
在数组上按
键时,会在数组末尾添加一个元素。换句话说,它作为索引youraray.length-1
的最后一个元素结束。当您弹出
时,将再次从数组中取出最后一个元素。因此,弹出stackback
将返回CentralPortfolio
,当然,第一个元素是不变的。好吧,这就是我的大脑工作的结果。我知道我一定是混淆了这个概念的一部分!尽管如此,通过正确解释数组包含的内容,我似乎理解了它!出于某种原因,我同时认为[0]是当前值,[0]是第一个值,我需要最后一个值!非常感谢。