@Tatiana104

Как вывести массив объектов таблицу js?

Здравствуйте, хочу вывести массив объектов в таблицу с помощью js в html страницу. На странице есть форма, с помощью которой массив наполняется объектами, т е. длина массива, как и таблицы неизвестна. Я сделала функцию, которая по идее должна заполняться по клику в форме, то есть создается объект, он попадает в массив и далее выводится в таблицу. Но каждый раз появляется строчка но пустая, хотя по консоли объект в массиве есть. Как заполнить строки свойствами объектов массива, в чём может быть проблема?
<table id="table" border="1"></table>
    <form id="form">
        <label>ФИО <input type="text" name="Fullname" id="Fullname"></label>
        <label>Дата рождения <input type="date" name="Birthday" id="Birthday"></label>
        <label>Год начала обучения 
            <select name="YearEd" id="YearEd">
                <option value=""></option>
                <option value="2019">2019</option>
                <option value="2020">2020</option>
                <option value="2021">2021</option>
                <option value="2022">2022</option>
                <option value="2023">2023</option>
            </select>
        </label>
        <label>Факультет <input type="text" name="Faculty" id="Faculty"></label>
        <input type="button" id="submit" value="Добавить студента">
    </form>
?
let Students = [],
    submitbtn = document.querySelector('#submit'),
    table = document.getElementById('table');

class Student {
    constructor() {
        this.Fullname = document.getElementById('Fullname').value;
        this.birthday = document.getElementById('Birthday').value;
        this.year = document.getElementById('YearEd').value;
        this.faculty = document.getElementById('Faculty').value;
        }
}
function createStudentArr(array) {
  array.push(new Student);
}
function getTable(table, arr) {
    for (let i = 0; i < arr.length; i++) {
        let tr = document.createElement('tr');
        for (let j = 0; j < arr[i].length; j++) {
            let td = document.createElement('td');
            td.innerHTML = arr[i][j];
            tr.appendChild(td);
        }
        table.appendChild(tr);
    }
}
submitbtn.addEventListener('click', (event) => {
    event.preventDefault();
    createStudentArr(Students);
    console.log(Students);
    getTable(table, Students);

})
  • Вопрос задан
  • 952 просмотра
Пригласить эксперта
Ответы на вопрос 1
@SunUp
Я не волшебник, я ещё только учусь
function getTable(table, arr) {
  for (let i = 0; i < arr.length; i++) {
    let tr = document.createElement("tr");
    for (let j = 0; j < Object.values(arr[i]).length; j++) {
      let td = document.createElement("td");
      td.innerHTML = Object.values(arr[i])[j];
      tr.appendChild(td);
    }
    table.appendChild(tr);
  }
}

Во внутреннем цикле вы пытаетесь итерировать объект а не массив, это можно сделать через Object.values(arr[i]), как я сделал выше, но лучше бы убрать этот цикл и переписать с использованием ключей объекта.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы