Как получить данные из сложной модели на клиенте?
Подскажите как получить из данного объекта список кварталов и городов? Например:
├── 2024_3
│ ├── Абакан
│ ├── Воронеж
├── 2024_4
│ ├── Омск
│ ├── Воронеж
Пример данных полученных к сервера.
[
{
"2024_3": [
{
"Абакан": [
{
"Петрушник С.": [
{
"director": "Петрушник С.",
"completion_date": "12.09.2024",
"total_task": 3
}
]
},
{
"Сидоров И.": [
{
"director": "Сидоров И.",
"completion_date": "14.09.2024",
"total_task": 2
}
]
}
]
},
{
"Воронеж": [
{
"Сидоров И.": [
{
"director": "Сидоров И.",
"completion_date": "16.09.2024",
"total_task": 1
}
]
}
]
}
]
},
{
"2024_4": [
{
"Омск": [
{
"Хрюкин А.": [
{
"director": "Хрюкин А.",
"completion_date": "13.11.2024",
"total_task": 4
}
]
}
]
},
{
"Воронеж": [
{
"Сидоров И.": [
{
"director": "Сидоров И.",
"completion_date": "15.11.2024",
"total_task": 2
}
]
}
]
}
]
}
]
Пример обработки данной модели данных.
function renderReport(model) {
let convert = JSON.stringify(model);
var obj = JSON.parse(convert);
for (quarterItem in obj) {
console.log("Кварталы --> " + Object.keys(obj[quarterItem]));
// console.log(Object.values(obj[quarterItem]));
const locations = Object.values(obj[quarterItem]);
for (item in locations) {
console.log("item --> " + Object.values(locations[item]));
}
}
};
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
Для решения для каждого элемента нужно взять его ключи и в качестве значения - получить список ключей из массива значений.
Для получения списка пар ключ-значения можно использовать метод Object.entries.
Для получения списка ключей из объекта Object.keys
Для получения одного списка на основе другого: .map и .flatMap (если полученные вложенные списки нужно объединить в один)
var data = [
{
"2024_3": [
{
"Абакан": [
{
"Петрушник С.": [
{
"director": "Петрушник С.",
"completion_date": "12.09.2024",
"total_task": 3
}
]
},
{
"Сидоров И.": [
{
"director": "Сидоров И.",
"completion_date": "14.09.2024",
"total_task": 2
}
]
}
]
},
{
"Воронеж": [
{
"Сидоров И.": [
{
"director": "Сидоров И.",
"completion_date": "16.09.2024",
"total_task": 1
}
]
}
]
}
]
},
{
"2024_4": [
{
"Омск": [
{
"Хрюкин А.": [
{
"director": "Хрюкин А.",
"completion_date": "13.11.2024",
"total_task": 4
}
]
}
]
},
{
"Воронеж": [
{
"Сидоров И.": [
{
"director": "Сидоров И.",
"completion_date": "15.11.2024",
"total_task": 2
}
]
}
]
}
]
}
];
function f(obj){
return obj.flatMap(o => Object.entries(o).map(([key, val])=>({
[key]:val.flatMap(v=>Object.keys(v))})))
}
console.log(f(data))