Как создать объект из массива объектов c одинаковыми ключами?

Рейтинг: 0Ответов: 2Опубликовано: 25.01.2023

Есть массив. Объектов в массиве может быть больше, и в каждом объекте намного больше пар ключ:значение.Нужно что бы динамически на основании названия ключа создавался объект с массивами {name: [20, 23, 20]}, и все значения с таким же ключем из объектов записывались в этот массив.

const data = [{name: 'Igor', age: 20}, {name: 'Vasya', age: 23},{name: 'Ivan', age: 20}];

И на выходе получалось это. Что бы не в ручную указывать что взять, и куда записать, а автоматически

const newData = {name: ['Igor', 'Vasya', 'Ivan'], age: [20, 23, 20]}

Ответы

▲ 0Принят

function group(data) {
  return data.reduce((previous, current) => {
    Object.keys(current).forEach(key => { previous[key] = [...(previous[key] ?? []), current[key]]; });
    return previous;
  }, {});
}

const data = [
  { name: 'Igor', age: 20 },
  { name: 'Vasya', age: 23 },
  { name: 'Ivan', age: 20 }
];
console.log(group(data));

▲ 0

Если я правильно понял ваш вопрос, то вам нужен reduce()

const data = [{name: 'Igor', age: 20}, {name: 'Vasya', age: 23},{name: 'Ivan', age: 20}];

const result = data.reduce((acc, { name, age }) => ({
  name: [...acc.name, name],
  age: [...acc.age, age],
}), { name: [], age: [] })

console.log(result)