为什么在循环中声明变量后输出错误? - (错误的问题:如何在递归方法中使用 Promise 来声明变量?



这个问题基于这个问题: 如何在递归方法中添加求和列表?

这次我想计算resultObject的平均值。因此,我创建了一个包含所有element.val数字的resultlist,一旦forEach循环结束,就会迭代tempuserlist并计算平均值。

然后,这个平均对象就是新的result。此示例仅显示我的数据集的一小部分示例。对于较大的数据集,存在异步性问题。我尝试过Promises,但真的不知道如何使用它们。有人有想法吗?

function somefunc(obj) {
let temp = {};  
let tempuserlist = [];
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if(!obj[key].hasOwnProperty("userlist")) {
somefunc(obj[key]);
}
obj[key].userlist.forEach(function(element) {
if (!temp.hasOwnProperty(element.name)){
tempuserlist.push(temp[element.user] = { user: element.user});
temp[element.user].resultlist = [];
temp[element.user].val= 0;
} temp[element.name].resultlist.push(element.val);
});
for (const user in tempuserlist) {
tempuserlist[user].val= Math.round(tempuserlist[user].val/ tempuserlist[user].resultlist.length);
}
}
}
obj.userlist = tempuserlist;
}

好的伙计们,

当我准备一个小例子时,我注意到了我愚蠢的错误......平均值不应该在循环中计算...否则平均值会一次又一次地计算...抱歉,看起来我的问题毕竟与承诺和异步编程无关。至少结果现在还可以,我还没有任何异步行为的感觉;)

无论如何,我感谢你愿意帮助我。尽管如此,您的建议还是帮助我从不同的角度看待事物,而不是陷入这些承诺。

function somefunc(obj) {
let temp = {};  
let tempuserlist = [];
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if(!obj[key].hasOwnProperty("userlist")) {
somefunc(obj[key]);
}
obj[key].userlist.forEach(function(element) {
if (!temp.hasOwnProperty(element.name)){
tempuserlist.push(temp[element.user] = { user: element.user});
temp[element.user].resultlist = [];
temp[element.user].val= 0;
} temp[element.name].resultlist.push(element.val);
});
}
}
for (const user in tempuserlist) {
tempuserlist[user].val= Math.round(tempuserlist[user].val/ tempuserlist[user].resultlist.length);
}
obj.userlist = tempuserlist;
}

最新更新