Дело в том, что в каждой итерации внутри forEach ты перезаписываешь объект obj полностью (а не расширяешь/дополняешь его), так что в последней итерации в объекте obj будут только те св-ва/значения, которые были у последнего элемента массива. Лучше так: