推入的Foreach数组返回空对象

时间:2020-11-09 18:38:14

标签: javascript node.js typescript

我有一个数组,其中的对象是通过函数内部的推送生成的,当我尝试直接在数组中查看对象时,我成功了,但是我使用的是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 } }

1 个答案:

答案 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;
  });
}