Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.11.2021, 16:22
Новичок на форуме
Отправить личное сообщение для it_liza Посмотреть профиль Найти все сообщения от it_liza
 
Регистрация: 03.11.2021
Сообщений: 5

Рендер юзеров системы
Добрый день! Запуталась, помогите, пожалуйста)
Есть массив юзеров. Я хочу вывести в консоль что то типа
Im ${student.name}, im a ${student.role}, ${student.age} years old, learning ${student.courses}. Но в консоль выводит следующее
"Im Jack Smith, im a student, 23 years old, learning [object Object],[object Object]". Как вывести запись в нормальном виде, чтобы был список курсов? Мне нужно еще несколько моментов решить, поэтому будет несколько наследований классов и методов, но пока хотя бы для класса Студенты.
const users = [
    {
        name: "Jack Smith",
        age: 23,
        img: "https://www.svgrepo.com/show/10103/man.svg",
        role: "student",
        courses: [
            {
                "title": "Front-end Pro",
                "mark": 20
            },
            {
                "title": "Java Enterprise",
                "mark": 100
            }
        ]
    },
    {
        name: "Amal Smith",
        age: 20,
        img: "https://www.svgrepo.com/show/113567/indian.svg",
        role: "student"
    },
    {
        name: "Noah Smith",
        age: 43,
        img: "https://www.svgrepo.com/show/48218/man.svg",
        role: "student",
        courses: [
            {
                "title": "Front-end Pro",
                "mark": 50
            }
        ]
    },
    {
        name: "Charlie Smith",
        age: 18,
        img: "https://www.svgrepo.com/show/169746/man.svg",
        role: "student",
        courses: [
            {
                "title": "Front-end Pro",
                "mark": 75
            },
            {
                "title": "Java Enterprise",
                "mark": 23
            }]
    },
    {
        name: "Emily Smith",
        age: 30,
        img: "https://www.svgrepo.com/show/161467/woman.svg",
        role: "admin",
        courses: [
            {
                "title": "Front-end Pro",
                "score": 10,
                "lector": "Leo Smith"
            },
            {
                "title": "Java Enterprise",
                "score": 50,
                "lector": "David Smith"
            },
            {
                "title": "QA",
                "score": 75,
                "lector": "Emilie Smith"
            }]
    },
    {
        name: "Leo Smith",
        age: 253,
        img: "https://www.svgrepo.com/show/51654/professor.svg",
        role: "lector",
        courses: [
            {
                "title": "Front-end Pro",
                "score": 78,
                "studentsScore": 79
            },
            {
                "title": "Java Enterprise",
                "score": 85,
                "studentsScore": 85
            }
        ]
    }
]
class User {
    constructor(name, age, role, img, courses){
        this.name = name;
        this.age = age;
        this.role = role;
        this.img = img;
        this.courses = courses;
    }
    render(){
        let data = document.write(`<div class="user__info">
                            <div class="user__info--data">
                                <img src="${this.img}" alt="${this.name}" height="50">
                                <div class="user__naming">
                                <p>Name: <b>${this.name}</b></p>
                                <p>Age: <b>${this.age}</b></p>
                                </div>
                            </div>
                        </div>
                        <div class="user__info--role ${this.role}">
                            <img src="${roles[this.role]}" alt="${this.role}" height="25">
                            <p>${this.role}</p>
                        </div>`)
 
        return data;
 
    }
    renderCourses(){
    }
    renderAge(){
        // console.log(`${this.age}`)
    }
}
 
 
class Student extends User{
    constructor(name, age, role, img, courses){
        super(name, age, role, img, courses);
    }
    renderCourses(){
        super.renderCourses();
    console.log(`Im ${this.courses}`);
 
    }
}
users
    .forEach(function(user) {
        if(user.role === 'student'){
            let student = new Student(user.name, user.age, user.role, user.img, user.courses);
            student.render();
            student.renderAge();
            console.log(`Im ${student.name}, im a ${student.role}, ${student.age} years old, learning ${student.courses}`)
        }
        
    })
Ответить с цитированием
  #2 (permalink)  
Старый 03.11.2021, 16:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

it_liza,
let title = student.courses.map(a => `"${a.title}"`);
            console.log(`Im ${student.name}, im a ${student.role}, ${student.age} years old, learning ${title}`)
Ответить с цитированием
  #3 (permalink)  
Старый 03.11.2021, 17:43
Новичок на форуме
Отправить личное сообщение для it_liza Посмотреть профиль Найти все сообщения от it_liza
 
Регистрация: 03.11.2021
Сообщений: 5

Сообщение от рони Посмотреть сообщение
it_liza,
let title = student.courses.map(a => `"${a.title}"`);
            console.log(`Im ${student.name}, im a ${student.role}, ${student.age} years old, learning ${title}`)
спасибо.
а как сделать так, чтобы я при вызове метода renderCourse могла получать информацию о курсах? типа как передать это значение title наверх?
Ответить с цитированием
  #4 (permalink)  
Старый 03.11.2021, 18:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

it_liza,
не понимаю, но советую выкинуть и забыть document.write.
Ответить с цитированием
  #5 (permalink)  
Старый 03.11.2021, 18:29
Новичок на форуме
Отправить личное сообщение для it_liza Посмотреть профиль Найти все сообщения от it_liza
 
Регистрация: 03.11.2021
Сообщений: 5

это для домашки, надо именно так и по другому я пока не умею((
Ответить с цитированием
  #6 (permalink)  
Старый 03.11.2021, 18:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

it_liza,
как-то так ...
<body>
<div id="out"></div>
    <script>
const users = [
    {
        name: "Jack Smith",
        age: 23,
        img: "https://www.svgrepo.com/show/10103/man.svg",
        role: "student",
        courses: [
            {
                "title": "Front-end Pro",
                "mark": 20
            },
            {
                "title": "Java Enterprise",
                "mark": 100
            }
        ]
    },
    {
        name: "Amal Smith",
        age: 20,
        img: "https://www.svgrepo.com/show/113567/indian.svg",
        role: "student"
    },
    {
        name: "Noah Smith",
        age: 43,
        img: "https://www.svgrepo.com/show/48218/man.svg",
        role: "student",
        courses: [
            {
                "title": "Front-end Pro",
                "mark": 50
            }
        ]
    },
    {
        name: "Charlie Smith",
        age: 18,
        img: "https://www.svgrepo.com/show/169746/man.svg",
        role: "student",
        courses: [
            {
                "title": "Front-end Pro",
                "mark": 75
            },
            {
                "title": "Java Enterprise",
                "mark": 23
            }]
    },
    {
        name: "Emily Smith",
        age: 30,
        img: "https://www.svgrepo.com/show/161467/woman.svg",
        role: "admin",
        courses: [
            {
                "title": "Front-end Pro",
                "score": 10,
                "lector": "Leo Smith"
            },
            {
                "title": "Java Enterprise",
                "score": 50,
                "lector": "David Smith"
            },
            {
                "title": "QA",
                "score": 75,
                "lector": "Emilie Smith"
            }]
    },
    {
        name: "Leo Smith",
        age: 253,
        img: "https://www.svgrepo.com/show/51654/professor.svg",
        role: "lector",
        courses: [
            {
                "title": "Front-end Pro",
                "score": 78,
                "studentsScore": 79
            },
            {
                "title": "Java Enterprise",
                "score": 85,
                "studentsScore": 85
            }
        ]
    }
]
class User {
    constructor(name, age, role, img, courses){
        this.name = name;
        this.age = age;
        this.role = role;
        this.img = img;
        this.courses = courses;
    }
    render(){
        let data = `<div class="user__info">
                            <div class="user__info--data">
                                <img src="${this.img}" alt="${this.name}" height="50">
                                <div class="user__naming">
                                <p>Name: <b>${this.name}</b></p>
                                <p>Age: <b>${this.age}</b></p>
                                </div>
                            </div>
                        </div>
                        <div class="user__info--role ${this.role}">
                            <img src="${this.role}" alt="${this.role}" height="25">
                            <p>${this.role}</p>
                        </div>`
        return data;
    }
    renderCourses(){
    }
    renderAge(){
       return `<div>${this.age}</div>`
    }
}
class Student extends User{
    constructor(name, age, role, img, courses){
        super(name, age, role, img, courses);
    }
    renderCourses(){
    super.renderCourses();
    let courses = 'no courses';
    if(this.courses && this.courses.length) courses = `<p>Courses: </p>` + this.courses.map(a => `<div>${a.title}</div>`).join('');
    return courses
    }
}
users
    .forEach(function(user) {
        if(user.role === 'student'){
            let student = new Student(user.name, user.age, user.role, user.img, user.courses);
            out.insertAdjacentHTML('beforeend', student.render());
            out.insertAdjacentHTML('beforeend', student.renderAge());
            out.insertAdjacentHTML('beforeend', student.renderCourses()) ;
        }
    })
    </script>
</body>
Ответить с цитированием
  #7 (permalink)  
Старый 03.11.2021, 18:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от it_liza
по другому
https://learn.javascript.ru/modifying-document
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отслеживание повеедения юзеров crampus Events/DOM/Window 2 14.01.2016 18:27
Не обновляется кэш у юзеров Maggie Javascript под браузер 12 28.08.2014 18:07
Команда разработает и внедрит системы на платформе Sharepoint (Москва) Sewers Работа 0 30.12.2013 16:13
Новый вектор в развитии системы - стабильная версия ImageCMS 4.0! imagecms Серверные языки и технологии 8 29.04.2013 19:17
Пример идеального ядра большой системы vissarion Библиотеки/Тулкиты/Фреймворки 0 27.12.2010 14:45