нужна помощь с объектами в js
let inform = [
{
name:'name1',
surname:'surname1',
languages:['Angular','PHP','JS'],
assessments:[{names:'Angular', assessment:20},{names:'PHP', assessment:20},{names:'JS', assessment:20},]
},
{
name:'name2',
surname:'surname2',
languages:['Angular','PHP','JS'],
assessments:[{names:'Angular', assessment:20},{names:'PHP', assessment:20},{names:'JS', assessment:20},]
},
{
name:'name3',
surname:'surname3',
languages:['Angular','PHP','JS'],
assessments:[{names:'Angular', assessment:20},{names:'PHP', assessment:20},{names:'JS', assessment:20},]
},
{
name:'name4',
surname:'surname4',
languages:['Angular','PHP','JS'],
assessments:[{names:'Angular', assessment:20},{names:'PHP', assessment:20},{names:'JS', assessment:20},]
},
{
name:'name5',
surname:'surname5',
languages:['Angular','PHP','JS'],
assessments:[{names:'Angular', assessment:20},{names:'PHP', assessment:20},{names:'JS', assessment:20},]
},
{
name:'name6',
surname:'surname6',
languages:['Angular','PHP','JS'],
assessments:[{names:'Angular', assessment:20},{names:'PHP', assessment:20},{names:'JS', assessment:20},]
},
{
name:'name7',
surname:'surname7',
languages:['Angular','PHP','JS'],
assessments:[{names:'Angular', assessment:20},{names:'PHP', assessment:20},{names:'JS', assessment:20},]
},
{
name:'name8',
surname:'surname8',
languages:['Angular','PHP','JS'],
assessments:[{names:'Angular', assessment:20},{names:'PHP', assessment:20},{names:'JS', assessment:20},]
},
{
name:'name9',
surname:'surname9',
languages:['Angular','PHP','JS'],
assessments:[{names:'Angular', assessment:20},{names:'PHP', assessment:20},{names:'JS', assessment:20},]
},
{
name:'name10',
surname:'surname10',
languages:['Angular','PHP','JS'],
assessments:[{names:'Angular', assessment:20},{names:'PHP', assessment:20},{names:'JS', assessment:20},]
},
]
let tbl = document.createElement('table');
tbl.setAttribute('class','table table-bordered');
cont.appendChild(tbl)
let thd = document.createElement('thead')
tbl.appendChild(thd)
let trs = document.createElement('tr');
thd.appendChild(trs)
for(let i = 0;i<4;i++){
let ths = document.createElement('th');
trs.appendChild(ths)
}
trs.children[0].innerHTML='Name';
trs.children[1].innerHTML='Surname';
trs.children[2].innerHTML='Languages';
trs.children[3].innerHTML='Assessment';
let tbd = document.createElement('tbody');
tbl.appendChild(tbd);
function inofs(){
return inform.map(student=>{
tbd.innerHTML=`
<tr>
<td>${student.name}</td>
<td>${student.surname}</td>
<td>
<ul>
<li>${student.languages[0]}</li>
<li>${student.languages[1]}</li>
<li>${student.languages[2]}</li>
</ul>
</td>
<td>
<div class="table-responsive">
<table class="table table-bordered" style="width: 200px">
<thead>
<tr class="bg-success">
<th>Subject</th>
<th>Assessment</th>
</tr>
</thead>
<tbody class="bg-success">
<tr>
<td>${student.assessments.names[0]}</td>
<td>${student.assessments.assessment[0]}</td>
</tr>
<tr>
<td>${student.assessments.names[1]}</td>
<td>${student.assessments.assessment[1]}</td>
</tr>
<tr>
<td>${student.assessments.names[2]}</td>
<td>${student.assessments.assessment[2]}</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
`
})
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<title>oop1</title>
<style>
.table{
background-color: #373a3c;
}
th,td,tr{
color: white
}
</style>
</head>
<body>
<div class="container" id="cont">
</div>
</body>
</html>
как видите в таблице 4 колонны, пытаюсь вывести под каждым названием соответствующую информацию о студентах, но получаю или только первый объект или undefinde или как в приведённом примере, ничего не выводится
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
Во-первых, не вызвана сама функция infos.
Во-вторых, индексация вызывается не у того поля - student.assessments.names[0] -> student.assessments[0].names
В-третьих, на каждой итерации .map - перезаписывается содержимое таблицы, вместо добавления.
Если все поправить может получиться следующее:
let inform = [{
name: 'name1',
surname: 'surname1',
languages: ['Angular', 'PHP', 'JS'],
assessments: [{
names: 'Angular',
assessment: 20
}, {
names: 'PHP',
assessment: 20
}, {
names: 'JS',
assessment: 20
}]
},
{
name: 'name2',
surname: 'surname2',
languages: ['Angular', 'PHP', 'JS'],
assessments: [{
names: 'Angular',
assessment: 20
}, {
names: 'PHP',
assessment: 20
}, {
names: 'JS',
assessment: 20
}]
},
{
name: 'name3',
surname: 'surname3',
languages: ['Angular', 'PHP', 'JS'],
assessments: [{
names: 'Angular',
assessment: 20
}, {
names: 'PHP',
assessment: 20
}, {
names: 'JS',
assessment: 20
}]
},
{
name: 'name4',
surname: 'surname4',
languages: ['Angular', 'PHP', 'JS'],
assessments: [{
names: 'Angular',
assessment: 20
}, {
names: 'PHP',
assessment: 20
}, {
names: 'JS',
assessment: 20
}]
},
{
name: 'name5',
surname: 'surname5',
languages: ['Angular', 'PHP', 'JS'],
assessments: [{
names: 'Angular',
assessment: 20
}, {
names: 'PHP',
assessment: 20
}, {
names: 'JS',
assessment: 20
}]
},
{
name: 'name6',
surname: 'surname6',
languages: ['Angular', 'PHP', 'JS'],
assessments: [{
names: 'Angular',
assessment: 20
}, {
names: 'PHP',
assessment: 20
}, {
names: 'JS',
assessment: 20
}]
},
{
name: 'name7',
surname: 'surname7',
languages: ['Angular', 'PHP', 'JS'],
assessments: [{
names: 'Angular',
assessment: 20
}, {
names: 'PHP',
assessment: 20
}, {
names: 'JS',
assessment: 20
}]
},
{
name: 'name8',
surname: 'surname8',
languages: ['Angular', 'PHP', 'JS'],
assessments: [{
names: 'Angular',
assessment: 20
}, {
names: 'PHP',
assessment: 20
}, {
names: 'JS',
assessment: 20
}]
},
{
name: 'name9',
surname: 'surname9',
languages: ['Angular', 'PHP', 'JS'],
assessments: [{
names: 'Angular',
assessment: 20
}, {
names: 'PHP',
assessment: 20
}, {
names: 'JS',
assessment: 20
}]
},
{
name: 'name10',
surname: 'surname10',
languages: ['Angular', 'PHP', 'JS'],
assessments: [{
names: 'Angular',
assessment: 20
}, {
names: 'PHP',
assessment: 20
}, {
names: 'JS',
assessment: 20
}]
},
]
let tbl = document.createElement('table');
tbl.setAttribute('class', 'table table-bordered');
cont.appendChild(tbl)
let thd = document.createElement('thead')
tbl.appendChild(thd)
let trs = document.createElement('tr');
thd.appendChild(trs)
for (let i = 0; i < 4; i++) {
let ths = document.createElement('th');
trs.appendChild(ths)
}
trs.children[0].innerHTML = 'Name';
trs.children[1].innerHTML = 'Surname';
trs.children[2].innerHTML = 'Languages';
trs.children[3].innerHTML = 'Assessment';
let tbd = document.createElement('tbody');
tbl.appendChild(tbd);
inofs()
function inofs() {
tbd.innerHTML = inform.map(student => {
return `
<tr>
<td>${student.name}</td>
<td>${student.surname}</td>
<td>
<ul>
<li>${student.languages[0]}</li>
<li>${student.languages[1]}</li>
<li>${student.languages[2]}</li>
</ul>
</td>
<td>
<div class="table-responsive">
<table class="table table-bordered" style="width: 200px">
<thead>
<tr class="bg-success">
<th>Subject</th>
<th>Assessment</th>
</tr>
</thead>
<tbody class="bg-success">
<tr>
<td>${student.assessments[0].names}</td>
<td>${student.assessments[0].assessment}</td>
</tr>
<tr>
<td>${student.assessments[1].names}</td>
<td>${student.assessments[1].assessment}</td>
</tr>
<tr>
<td>${student.assessments[2].names}</td>
<td>${student.assessments[2].assessment}</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
`
}).join('')
}
.table {
background-color: #373a3c;
}
th,
td,
tr {
color: white
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<div class="container" id="cont">
</div>