Преобразование данных в нужный формат
есть данные вида
const data = [{
name: "country",
data: [{
name: "city1",
count: 74,
},
{
name: "city2",
count: 4,
},
{
name: "city3",
count: 6,
}
]
},
{
name: "country2",
data: [{
name: "city2",
count: 12,
},
{
name: "city3",
count: 16,
}
]
}
]
мне их надо преобразовать в другой формат
[
{
"name": "country",
"city1": {
"name": "city1",
"count": 74
},
"city2": {
"name": "city2",
"count": 4
},
"city3": {
"name": "city3",
"count": 6
}
},
{
"name": "country2",
"city2": {
"name": "city2",
"count": 12
},
"city3": {
"name": "city3",
"count": 16
}
}
]
мое решение
let result = [];
data.map((country) => {
let obj = {
name: country.name
}
country.data.map((city, index) => {
obj[city.name] = city
})
result.push(obj)
})
console.log(result)
Вопрос заключается в том как можно сделать такое преобразование красивее и более правильно?
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
map уже возвращает массив, нет нужды его отдельно создавать и вручную заполнять
для свертки массива
.dataв объект можно использовать.reduce
В итоге код может выглядеть так:
const data = [{
name: "country",
data: [{
name: "city1",
count: 74,
},
{
name: "city2",
count: 4,
},
{
name: "city3",
count: 6,
}
]
},
{
name: "country2",
data: [{
name: "city2",
count: 12,
},
{
name: "city3",
count: 16,
}
]
}
]
let result = data.map((country) => country.data.reduce((acc, cur) => {
acc[cur.name] = cur;
return acc;
}, {
name: country.name
}))
console.log(result)