#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;
});
}