微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Object.entries 上运行 forEach 不会返回与 for 循环相同的东西

如何解决在 Object.entries 上运行 forEach 不会返回与 for 循环相同的东西

我正在使用常规 for 循环迭代一个对象,这对我来说很好用。但是,我试图删除代码的所有 for 循环,转而使用数组迭代,但出于某种原因,我无法理解为什么在使用 forEach 时会得到不同的结果。

注意:这里的 forEach 来自一个叫做 p-iteration 的模块

https://www.npmjs.com/package/p-iteration

这很好用,它返回正确的值。

  for await (const [key,value] of Object.entries(tatGroupedByRegion)) {
    onTarget = 0;
    notOnTarget = 0;
    const cases = [];
    await forEach(value,async email => {
      if (!cases.includes(email.new_name)) {
        cases.push(email.new_name);
        isOnTarget(email);
      }
    });

    backlogData[key].tatd1 = percentage(onTarget,notOnTarget);
    tatd1Total.value += parseInt(percentage(onTarget,notOnTarget),10);
    if ((parseInt(percentage(onTarget,notOnTarget) !== 0),10)) {
      tatd1Total.count += 1;
    }
  }

这不起作用,这部分backlogData[key].tatd1 = percentage(onTarget,notOnTarget),一遍又一遍地返回相同的值。

 await forEach(Object.entries(tatGroupedByRegion),async ([key,value]) => {
    onTarget = 0;
    notOnTarget = 0;
    const cases = [];
    await forEach(value,10)) {
      tatd1Total.count += 1;
    }
  });

解决方法

exports.forEach = async (array,callback,thisArg) => {
  const promiseArray = [];
  for (let i = 0; i < array.length; i++) {
    if (i in array) {
      const p = Promise.resolve(array[i]).then((currentValue) => {
        return callback.call(thisArg || this,currentValue,i,array);
      });
      promiseArray.push(p);
    }
  }
  await Promise.all(promiseArray);
};

这是您正在使用的 forEach 的实现。回调接收 this 作为第一个参数,这可能是一个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。