Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Создать массив в нужном виде (https://javascript.ru/forum/misc/77524-sozdat-massiv-v-nuzhnom-vide.html)

Роман1479 16.05.2019 12:41

Создать массив в нужном виде
 
Добрый день! Подскажите пожалуйста как сформировать такой массив как ниже. Т.е. у меня есть вывод из базы на 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);

SuperZen 16.05.2019 12:52

json покажи )

Роман1479 16.05.2019 13:18

Код:

[
{"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"),
            ]),  
        ]                     
    )

Alexandroppolus 16.05.2019 16:17

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, время: 17:22.