Artem3677
@Artem3677
Учусь

Выполнить преобразование структуры данных из массива объектов в объект где значениями ключей будут массивы?

Дан список городов и их стран, хранящийся в следующей структуре:

let data = [
{
country: 'country1',
city: 'city11',
},
{
country: 'country2',
city: 'city21',
},
{
country: 'country3',
city: 'city31',
},
{
country: 'country1',
city: 'city12',
},
{
country: 'country1',
city: 'city13',
},
{
country: 'country2',
city: 'city22',
},
{
country: 'country3',
city: 'city31',
},
]
Напишите код, которой переделает структуру данных вот в такую:

{
'country1': [
'city11', 'city12', 'city13',
],
'country2': [
'city21', 'city22'
],
'country3': [
'city31', 'city32'
],
}
Я сделал костыль:
let set = new Set;

for (let obj of data) {
set.add(obj.country);
}

let arr = [...set];

let arr1 = [];
let arr2 = [];
let arr3 = [];

for (let obj of data) {
if (obj.country === arr[0]) {
arr1.push(obj.city);
}

if (obj.country === arr[1]) {
arr2.push(obj.city);
}

if (obj.country === arr[2]) {
arr3.push(obj.city);
}
}

let subarr = [];
subarr.push(arr1, arr2, arr3);

let obj = {};
for(let i = 0; i < arr.length; i++) {
obj[arr[i]] = subarr[i];
}
console.log(obj);
нужно сделать универсальное решение!!!
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
const result = data.reduce(
  (acc, cur) => ((acc[cur.country] ??= []).push(cur.city), acc),
  {},
);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы