javascript - 为什么在循环中声明变量后输出错误?- (错误问题:如何在递归方法中使用 Promises 来声明变量?)
问题描述
这个问题基于这个问题: 如何在递归方法中添加求和列表?
这次我想计算resultObject
. 因此,我创建了一个resultlist
包含所有element.val
数字的 a,一旦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;
}
推荐阅读
- python - 将 Audacity Filter Curve EQ 转换为传递函数并通过 python 将其应用于信号
- c# - 将一个数据表中的值添加到另一个 c#
- sql - SQL - 按一列计数和排序
- oracle-cloud-infrastructure - 默认用户的 Oracle Cloud shell 密码是什么
- android - 如何根据约束布局中的内容创建视图?
- jquery - 在 asp.net 核心中使用 jQuery 动态创建选择并从数据库中添加选择选项
- c++ - C++ 的 UML 序列图:对象的功能有哪些生命线?
- php - 如何自动处理表单中的所有字段并将它们传递给 php?
- javascript - JSX 花括号内的 if 和 else if 语句
- elasticsearch - 弹性搜索仅根据其字段值对某些文档应用提升