Как сгруппировать данные из нескольких объектов в один по заголовку?
Подскажите пожалуйста как преобразовать массив объектов.
Есть следующие данные которые попадают в функцию:
[
{ title: 'test', total: 10, free: true, city: 'Kiev' },
{ title: 'test', challenge: 'True', avg: '10' },
{ title: 'test', bbc: 'True' },
{ title: 'another', count: 43, price: 2000 }
]
Необходимо сделать функцию которая будет принимать ключ title и массив данных, искать повторяющиеся значения тайтлов и на выходе получать один объект со всеми объединёнными свойствами.
Должно получится так:
{ title: 'test', total: 10, free: true, и так далее... }
Ответы (1 шт):
Автор решения: Vasily
→ Ссылка
Для каждого из объектов в массиве:
const array = [
{ title: "test", total: 10, free: true, city: "Kiev" },
{ title: "test", challenge: "True", avg: "10" },
{ title: "test", bbc: "True" },
{ title: "another", count: 43, price: 2000 }
]
const sort = array.reduce((acc, cur) => {
acc[cur.title] = {...acc[cur.title], ...cur}
return acc
}, {})
const result = Object.values(sort)
console.log(result)
// [
// {
// "title": "test",
// "total": 10,
// "free": true,
// "city": "Kiev",
// "challenge": "True",
// "avg": "10",
// "bbc": "True"
// },
// {
// "title": "another",
// "count": 43,
// "price": 2000
// }
// ]
Функция:
const array = [
{ title: "test", total: 10, free: true, city: "Kiev" },
{ title: "test", challenge: "True", avg: "10" },
{ title: "test", bbc: "True" },
{ title: "another", count: 43, price: 2000 }
]
const combineObjProp = (title, arr) => {
const sort = arr.reduce((acc, cur) => {
if (cur.title === title) {
acc[cur.title] = { ...acc[cur.title], ...cur }
}
return acc
}, {})
return sort[title]
}
console.log(combineObjProp("test", array))
// {
// "title": "test",
// "total": 10,
// "free": true,
// "city": "Kiev",
// "challenge": "True",
// "avg": "10",
// "bbc": "True"
// }
Данный метод будет работать корректно только если ключи внутри объектов не будут пересекаться.