Как создать объект из массива объектов c одинаковыми ключами?
Есть массив. Объектов в массиве может быть больше, и в каждом объекте намного больше пар ключ:значение.Нужно что бы динамически на основании названия ключа создавался объект с массивами {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]}
Ответы (2 шт):
Автор решения: Алексей
→ Ссылка
Если я правильно понял ваш вопрос, то вам нужен 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)
Автор решения: eccs0103
→ Ссылка
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));