Каждый массив из push возвращает пустые объекты

#javascript #node.js #typescript

#javascript #node.js #typescript

Вопрос:

У меня есть массив, в котором объекты генерируются из push, который находится внутри функции, когда я пытаюсь просмотреть объекты непосредственно в массиве, я успешен, но я использую forEach, чтобы добавить количество раз, когда идентификатор использует сервис, но результат всегда возвращается пустым.

 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 } ]
  

но чтобы увидеть общую сумму каждого идентификатора, массив возвращает пустой

 console.log(result);
Return:

    {}
  

Мне нужно вернуть, как:

 [ { id: 559892099500, age: 3 } }
  

Ответ №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;
  });
}