如果运行此命令,我的控制台中将显示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) {
}
如何通过异步实现这一目标?
答案 0 :(得分:2)
我不确定async.forEach
是什么,但是假设您只是尝试按照您所说的三个步骤来进行正常的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
答案 1 :(得分:1)
const res = keys.reduce((acc, elem, i) => 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();
}