16.05.2019, 12:41
|
Интересующийся
|
|
Регистрация: 06.10.2017
Сообщений: 24
|
|
Создать массив в нужном виде
Добрый день! Подскажите пожалуйста как сформировать такой массив как ниже. Т.е. у меня есть вывод из базы на 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);
|
|
16.05.2019, 12:52
|
|
Профессор
|
|
Регистрация: 08.11.2017
Сообщений: 642
|
|
json покажи )
|
|
16.05.2019, 13:18
|
Интересующийся
|
|
Регистрация: 06.10.2017
Сообщений: 24
|
|
Код:
|
[
{"id":42","title":"карточка 1","type":"блок1"},
{"id":"56","title":"карточка 2","type":"блок2"},
{"id":"34","title":"карточка 3","type":"блок2"},
{"id":"21","title":"карточка 4","type":"блок2"}
] |
Должно быть так:
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"),
]),
]
)
|
|
16.05.2019, 16:17
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
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);
}));
}));
});
|
|
|
|