Как сгруппировать данные из нескольких объектов в один по заголовку?

Подскажите пожалуйста как преобразовать массив объектов.

Есть следующие данные которые попадают в функцию:

[ 
  { 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"
// }

Данный метод будет работать корректно только если ключи внутри объектов не будут пересекаться.

→ Ссылка