将函数推入数组 - 循环和拼接?

2024-02-03

使用 Javascript 我需要能够:

1:将一定数量的相同函数(每个函数具有不同的参数)推送到数组中。

2:然后一一运行每个函数(在本例中只是参数/编号的警报)

3:在每个函数之后,我需要能够将该函数从数组中拼接出来

4:每次之后检查数组长度 - 一旦数组再次为空 - 提醒用户它已完成

现在我似乎能够完成任务 1,2 和 4,但我对如何在运行后从数组中拼接函数感到困惑 - 有人可以帮忙吗?由于我无法删除该函数,因此一旦调用了所有函数,我就永远不会收到“完成”警报

到目前为止我的 JavaScript 代码是:

// Create empty array
var array = [];

// Push functions into array - dynamic amount and could be any amount of functions
array.push(func(1));
array.push(func(2));
array.push(func(3));

// Call array manager function after pushing array
arrayManager();

// Array manager function to splice and detect when finished
function arrayManager() {
    if (array.length < 1) {
        alert("done");
    }
    else {
    //////////////////////////////////
    // << THIS IS WHERE I DON'T KNOW HOW TO SPLICE THE ITEM FROM THE ARRAY
    //////////////////////////////////
    }
}

// Function for array objects - alert passed parameter
function func(num){
    alert(num);
}

首先,您目前没有将函数推入数组,而是执行 func。为了实现推送,你的函数应该是这样的:

// Function for array objects - alert passed parameter
function func(num){
  return function(){
    alert(num);
  }
}

现在,如果您的函数是同步的,您可以简单地迭代数组

for(var i in arr){
  arr[i]();
}
console.log('done');

如果我们正在处理异步函数,那么它们需要有一个回调:

// Function for array objects - alert passed parameter
function func(num){
  return function(callback){
    alert(num);
    callback();
  }
}

然后您可以使用计数器并行运行。

var count = arr.length;
for(var i in arr){
  arr[i](function(){
    if(--count === 0){
      console.log('Done');
    }
  });
}

或者按顺序:

function run(){
  var fn = arr.shift();
  if(!fn){
    console.log('Done');
  } else {
    fn(run);
  }
}
run();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将函数推入数组 - 循环和拼接? 的相关文章

随机推荐