【发布时间】:2021-05-20 12:24:50
【问题描述】:
我正在使用常规 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, 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;
}
});
【问题讨论】:
-
k.meinkopf's answer 显示源代码。 The documentation 提到了同样的事情 -
forEach与 arrays 一起使用。Object.entries返回一个 iterable,因此它不适用于仅传入数组(-likes)的假设。您需要先将条目转换为数组,或者您需要直接使用可迭代本身而不实现它。我不太确定怎么做,因为我不确定你为什么有async/await- 看起来你没有异步操作。
标签: javascript node.js arrays foreach