【问题标题】:Async foreach in javascript with step of njavascript中的异步foreach,步长为n
【发布时间】:2019-04-20 20:55:17
【问题描述】:

如果我运行它,我将在我的控制台中得到 1、2、...、50。

keys = [1, 2, 3, ..., 50];
async.forEach(keys, function (key, callback){
    console.log(key);
    callback();
}

但我想要一步为 3。我想要得到:1、4、7、... 像这样的for循环:

for (let key = 1; key <= 50; key = key + 3) {

}

我怎样才能通过异步实现这一点?

【问题讨论】:

  • 如果 keys 最初设置为 [1, 2, 3...,每次迭代时只需乘以 3 并减去即可得到 1, 4, 7?是这个意思吗?

标签: javascript node.js for-loop foreach async.js


【解决方案1】:

const res = keys.reduce((acc, elem, i) =&gt; i % 3 == 0 ? [...acc, elem] : acc, []);

会给你res的结果:

[1, 4, 7, 10, 13, ..., 48]; // Every 3rd index

i % 3 控制步骤。因此,如果您想每次增加 4,您可以将其更改为 i % 4 等...

因此,您可以像这样在代码中使用它:

keys = [1, 2, 3, ..., 50];
let stepKeys = keys.reduce((acc, elem, i) => i % 3 == 0 ? [...acc, elem] : acc, []);
async.forEach(stepKeys, function (key, callback){
    console.log(key);
    callback();
}

【讨论】:

    【解决方案2】:

    我不确定async.forEach 是什么,但假设你只是想按照你所说的 3 个步骤来做一个普通的forEach,这是我的方法:

    forEach 并不真正适合您操作索引的用途(特别是在更核心的情况下,您的索引可能会在循环内更改),但作为一种快速破解,您可以执行以下操作:

    keys.forEach((key, index) => {
      if(index % 3 === 0) {
      // Only true when it's a multiple of 3
      // Do your loop body
      } 
    });
    

    注意forEach带回调,第一个参数是当前值,可选参数(其中是当前索引),见docs

    【讨论】:

    • 这个答案更透明
    猜你喜欢
    • 2012-06-16
    • 2017-02-10
    • 2014-03-12
    • 1970-01-01
    • 2017-10-22
    • 2012-05-21
    • 2012-10-15
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多