Создать массив в нужном виде
Добрый день! Подскажите пожалуйста как сформировать такой массив как ниже. Т.е. у меня есть вывод из базы на AJAX, в success возвращается JSON строка.
Я делаю JSON.parse и я должен через for сформировать такой массив. Помогите пожалуйста.
var schools = [
new School (1, "School 1", [
new Class(1, "", [
new Student(1, "1.1"),
new Student(2, "1.2"),
]),
]
),
...
];
var vm = new vModel(schools);
|
json покажи )
|
Код:
[
new School (1, "блок1", [
new Class(1, "", [
new Student(1, "карточка 1", "42"),
]),
]
),
new School (1, "блок2", [
new Class(1, "", [
new Student(2, "карточка 2", "56"),
new Student(2, "карточка 3", "34"),
new Student(2, "карточка 4", "21"),
]),
]
)
|
json - то что спарсили из строки
Сначала группируем данные, потом из них делаем объекты
var schools = json.reduce(function(r, item) {
var school = r.map[item.type];
if (!school) {
school = r.map[item.type] = {
id: item.type,
classes: [{
id: '',
studs: []
}]
};
r.arr.push(school);
}
var cls = school.classes[0];
cls.studs.push(item);
return r;
}, { arr: [], map: Object.create(null) }).arr.map(function (school, idx) {
return new School(idx + 1, school.id, school.classes.map(function (cls, idx) {
return new Class(idx + 1, cls.id, cls.studs.map(function (stud, idx) {
return new Student(idx + 1, stud.title, stud.id);
}));
}));
});
|
| Часовой пояс GMT +3, время: 06:48. |