Асинхронный foreach в javascript с шагом n - PullRequest
0 голосов
/ 18 ноября 2018

Если я запущу это, я получу 1, 2, ..., 50 в моей консоли.

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

Но я хочу иметь шаг 3. Я хочу получить: 1, 4, 7, ... как это для цикла:

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

}

Как я могу добиться этого с помощью асинхронного?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

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();
}
0 голосов
/ 18 ноября 2018

Я не уверен, что такое async.forEach, но при условии, что вы просто пытаетесь сделать нормальный forEach с 3 шагами, как вы сказали, вот мой подход:

forEach не очень подходит для случаев, когда вы манипулируете своим индексом (особенно в более жестких случаях, когда ваш индекс может измениться в цикле), но для быстрого взлома вы можете сделать следующее:

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

Обратите внимание, что forEach принимает обратный вызов, где первый параметр является текущим значением, а необязательные параметры (среди которых текущий индекс), см. документы

...