GOOGLE ADS

пятница, 15 апреля 2022 г.

Как объединить массив объектов по его ключу в javascript

У меня есть массив таких объектов:

[
{
user: {
key1: ['1', '2', '3'],
},
},
{
user: {
key2: ['3', '4', '5'],
},
},
{
user2: {
key1: ['1', '2', '3'],
},
},
{
user2: {
key2: ['3', '4', '5'],
},
},
....
];

И мне нужно отфильтровать их по своим ключам и ожидать такого результата

[
{
user: {
key1: ['1', '2', '3'],
key2: ['3', '4', '5'],
},
},
{
user2: {
key1: ['1', '2', '3'],
key2: ['3', '4', '5'],
....
}
}
]

Здесь user, user2 может быть любой клавишей (userName), а также key1, key 2 и т. д. может быть любой клавишей (userActivity) с массивом строк.

Вот тип объекта:

[key: string]: {
[key: string]: string[];
};
}[];

Какой будет лучший способ отфильтровать это, любая помощь будет оценена


Решение проблемы

Вы можете сделать это с помощью reduce()метода:


  • Перебрать каждый элемент из dataмассива

  • Проверьте, keyсуществует ли уже элемент from в конечном результате

  • Если он существует, объединить текущее значение и новое значение

  • Если он не существует, инициализируйте новое значение



const data = [
{ user: { key1: ['1', '2', '3'] } },
{ user: { key2: ['3', '4', '5'] } },
{ user2: { key1: ['1', '2', '3'] } },
{ user2: { key2: ['3', '4', '5'] } }
];
const result = data.reduce((accumulator, currentValue)=>{
const currentKey = Object.keys(currentValue)[0];

if(Object.keys(accumulator).includes(currentKey)) {
accumulator[currentKey] = {...accumulator[currentKey],...currentValue[currentKey]};
} else {
accumulator[currentKey] = currentValue[currentKey];
}

return accumulator;
},{})
console.log(result);

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...