Как преобразовать из множества объектов с сообщениями в один объект?

Мне нужно получить из множества объектов, которые включает в себя поля: id, text, nickName, chatId, преобразовать в один объект, который будет включать в себя поля: messages(либо же texts, без разницы) в котором будут все сообщения из множества объектов, nickName, chatId.

Пример исходных данных: Исходные данные

Во что нужно преобразовать: Исходные данные

Если не грузятся картинки, то напишу текстом:

Мне нужно из этого: 
{ 
  id: "1", 
  text: "Проверка связи", 
  nickName: "Илья Угловской", 
  chatId: "843582698" 
},
{
  id: "2", 
  text: "Повторяю, проверка связи", 
  nickName: "Илья Угловской", 
  chatId: "843582698" 
} 
Преобразовать в это: 
{ 
  messages: {
    "Проверка связи", 
    "Повторяю, проверка связи" 
  }, 
  nickName: "Илья Угловской", 
  chatId: "843582698"
}

Ответы (1 шт):

Автор решения: vsemozhebuty

Например, так:

const data = [
  { "id": "1", "text": "Проверка связи", "nickName": "Илья Угловской", "chatId": "843582698" },
  { id: 2, text: 'Повторяю, проверка связи', nickName: 'Илья Угловской', chatId: 843582698 },
  { "id": "3", "text": "Baz 1", "nickName": "Foo Bar", "chatId": "1" },
  { id: 4, text: 'Baz 2', nickName: 'Foo Bar', chatId: 1 },
];

const newData = Object.values(data.reduce(
  (acc, { chatId, nickName, text }) => {
    // acc[chatId] ??= { chatId, nickName, messages: [] };
    if (!acc[chatId]) acc[chatId] = { chatId, nickName, messages: [] };
    acc[chatId].messages.push(text);
    return acc;
  },
  {},
));

console.log(newData);

→ Ссылка