Javascript 在不使用jQuery的情况下,通过包含函数的数组反转循环方向

Javascript 在不使用jQuery的情况下,通过包含函数的数组反转循环方向,javascript,arrays,function,Javascript,Arrays,Function,我有下面的Javascript,其目的是使用事件监听器执行的数组函数,使用户能够在许多菜单中前后循环 var i = 0; var steps = [ function one() {do something}, function two() {do something}, function three() {do something}, function four() {do something}, function five() {do something} ] //lo

我有下面的Javascript,其目的是使用
事件监听器执行的
数组
函数,使用户能够在许多菜单中前后循环

var i = 0;
var steps = [
  function one() {do something},
  function two() {do something},
  function three() {do something},
  function four() {do something},
  function five() {do something}
]
//loops forward through array *successfully*
document.getElementById('forward').addEventListener("click", function() {
  steps[i]();
}
//loops backwards through array *unsuccessfully*
document.getElementById('backward').addEventListener("click", function() {
  steps[i]().reverse();
}
第一个
eventListener
函数成功地循环了
数组
,但是第二个
eventListener
函数向后,却未能反向循环数组(这一点并不奇怪)

首先,我不确定如何反向循环包含函数的
数组

其次,我想知道是否可以从
数组中的特定点反向循环
数组
;本质上,如果
数组已循环通过,并且只执行了函数三(),是否有一个脚本允许用户向后循环到函数二(),然后是函数一(),然后再向前循环

在这里,我已经阅读了一些有关数组.reverse()的StackOverflow问题,但是我发现没有一个问题与函数的存在和/或数组中的循环反转有关


谢谢你的回答,非常感谢

我认为您不需要在阵列上循环。您需要“管理状态”,这意味着您可以增加和减少
i
。更新状态后,使用
步骤[i]
找到正确的函数并调用它

var-activeMenuIndex=0;
变量步骤=[
函数1(){console.log(“激活菜单1”)},
函数2(){console.log(“激活菜单2”)},
函数3(){console.log(“激活菜单3”)},
函数4(){console.log(“激活菜单4”)},
函数5(){console.log(“激活菜单5”)}
];
var activateCurrentMenu=函数(){
var activator=步骤[activeMenuIndex];
if(激活剂){
激活剂();
}否则{
log(“越界!”);
}
};
var nextMenu=函数(){
//TODO:检查是否有越界
activeMenuIndex+=1;
激活当前菜单();
};
var prevMenu=函数(){
//TODO:检查是否有越界
activeMenuIndex-=1;
激活当前菜单();
};
document.getElementById('forward')。addEventListener(“单击”,下一个菜单);
document.getElementById('backward').addEventListener(“单击”,预览菜单)
返回

接下来
我认为您不需要在阵列上循环。您需要“管理状态”,这意味着您可以增加和减少
i
。更新状态后,使用
步骤[i]
找到正确的函数并调用它

var-activeMenuIndex=0;
变量步骤=[
函数1(){console.log(“激活菜单1”)},
函数2(){console.log(“激活菜单2”)},
函数3(){console.log(“激活菜单3”)},
函数4(){console.log(“激活菜单4”)},
函数5(){console.log(“激活菜单5”)}
];
var activateCurrentMenu=函数(){
var activator=步骤[activeMenuIndex];
if(激活剂){
激活剂();
}否则{
log(“越界!”);
}
};
var nextMenu=函数(){
//TODO:检查是否有越界
activeMenuIndex+=1;
激活当前菜单();
};
var prevMenu=函数(){
//TODO:检查是否有越界
activeMenuIndex-=1;
激活当前菜单();
};
document.getElementById('forward')。addEventListener(“单击”,下一个菜单);
document.getElementById('backward').addEventListener(“单击”,预览菜单)
返回

接下来
这就是你要找的吗?循环通过数组

var步骤=[
函数一(){console.log(“1”)},
函数2(){console.log(“2”)},
函数三({console.log(“3”)},
函数4(){console.log(“4”)},
函数5(){console.log(“5”)}
]
//通过数组向前循环
功能前进(一){
slice(0,i).forEach(函数(el){el();});
}
//通过反向的aarray向后循环
功能反向(一){
steps.reverse().slice(0,i).forEach(函数(el){el();});
}
转发(3);

向后(3)这就是你要找的吗?循环通过数组

var步骤=[
函数一(){console.log(“1”)},
函数2(){console.log(“2”)},
函数三({console.log(“3”)},
函数4(){console.log(“4”)},
函数5(){console.log(“5”)}
]
//通过数组向前循环
功能前进(一){
slice(0,i).forEach(函数(el){el();});
}
//通过反向的aarray向后循环
功能反向(一){
steps.reverse().slice(0,i).forEach(函数(el){el();});
}
转发(3);

向后(3)你在这里的意图不是很清楚。你能说得更具体些吗?最好是使用?我看不到任何循环…,让您的函数写入控制台,这样您就可以看到您正在做什么检查,看看这是否有帮助。如果是,请让我知道,以便我可以张贴它作为一个答案。另外,如果这是您所期望的,我建议您再次阅读您的问题,看看这是否是您在问题中描述的内容。:)你在这里的意图不是很清楚。你能说得更具体些吗?最好是使用?我看不到任何循环…,让您的函数写入控制台,这样您就可以看到您正在做什么检查,看看这是否有帮助。如果是,请让我知道,以便我可以张贴它作为一个答案。另外,如果这是您所期望的,我建议您再次阅读您的问题,看看这是否是您在问题中描述的内容。:)