我有一个数组,其中的对象是通过函数内部的推送生成的,当我尝试直接在数组中查看对象时,我成功了,但是我使用的是forEach来添加id的次数使用该服务,但结果始终返回空。
client.onMessage(async message => {
count_commands.push({id:parseInt(regNumberPhone), age: 1});
});
const count_commands = [],
hash = Object.create(null),
result = [];
count_commands.forEach(function (o) {
if (!hash[o.id]) {
hash[o.id] = { id: o.id, age: 0 };
result.push(hash[o.id]);
}
hash[o.id].age += +o.age;
});
在count_commands中查看对象
console.log(count_commands);
Return:
[ { id: 559892099500, age: 1 },
{ id: 559892099500, age: 1 },
{ id: 559892099500, age: 1 } ]
但要查看每个id的总和,数组将返回空
console.log(result);
Return:
{}
我需要返回:
[ { id: 559892099500, age: 3 } }
答案 0 :(得分:1)
您的代码按预期工作。即for循环将返回您所需的结构。我要猜测的问题是,您正在注册一个仅在收到count_commands
事件后才填充onMessage
数组的事件处理程序。
如果您尝试在填充count_commands
数组之前对其进行迭代,则将返回空结果。我怀疑如果console.log
返回{}
而不是[]
还会有其他问题。
您需要将代码修改为类似于以下内容的
const count_commands = [];
const result = [];
const hash = {};
client.onMessage(async message => {
count_commands.push({id:parseInt(regNumberPhone), age: 1});
updateResults();
});
function updateResults() {
count_commands.forEach(function (o) {
if (!hash[o.id]) {
hash[o.id] = { id: o.id, age: 0 };
result.push(hash[o.id]);
}
hash[o.id].age += +o.age;
});
}