Массив объектов js. Соединить объекты по значению
Всех приветствую. У меня есть динамический массив объектов
data = [
{
name: alex,
date: 24/09/2022
ip:222.222.43.42
},
{
name: alex,
date: 27/09/2022
ip:222.222.43.41
},
{
name: sam,
date: 26/09/2022
ip:222.222.43.40
},
{
name: sam,
date: 24/09/2022
ip:222.222.43.32
},
{
name: sam,
date: 24/09/2022
ip:222.222.43.31
},
]
Я хочу получить следующий результат
data = [
{
name: alex,
date: [24/09/2022,27/09/2022]
ip:[222.222.43.40,222.222.43.41,222.222.43.42]
},
{
name: sam,
date: [26/09/2022,28/09/2022,24/09/2022]
ip:[222.222.43.32,222.222.43.31]
},
]
То есть ,соединить объекты по значением свойства name. К сожалению я не могу сделать фильтр именно по этим данным, так как массив объектов является динамическим. То есть значения свойства name будут постоянно меняться.
Ответы (1 шт):
Автор решения: Sergey Glazirin
→ Ссылка
const data = [{
name: 'alex',
date: '24/09/2022',
ip: '222.222.43.42',
},
{
name: 'alex',
date: '27/09/2022',
ip: '222.222.43.41',
},
{
name: 'sam',
date: '26/09/2022',
ip: '222.222.43.40',
},
{
name: 'sam',
date: '24/09/2022',
ip: '222.222.43.32',
},
{
name: 'sam',
date: '24/09/2022',
ip: '222.222.43.31',
},
];
// получаем список уникальных имен
const uniqueName = [...new Set(data.map(item => item.name))];
const result = uniqueName.map(name => {
// получаем список данных, где есть имя
const itemsByName = data.filter(element => element.name === name);
// формируем объект для каждого имени
return {
name,
date: [...new Set(itemsByName.map(element => element.date))],
ip: [...new Set(itemsByName.map(element => element.ip))],
}
})
console.log(result);