// 3 persons
// -------------УСЛОВИЕ-------------
// Сделать три ассоциативных массива a, b, c, в каждом из которых должны быть поля name и surname.
// -------------РЕШЕНИЕ-------------
const task01block = document.createElement('div');
task01block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task01title = document.createElement('h2');
task01title.innerText = 'Task-01 3 persons';
const obja1 = document.createElement('p');
const objb1 = document.createElement('p');
const objc1 = document.createElement('p');
root.appendChild(task01block);
task01block.appendChild(task01title);
class PersonObj {
constructor() {
this.name = "";
this.surname = "";
}
}
const a = new PersonObj();
const b = new PersonObj();
const c = new PersonObj();
a.name ='Боб';
a.surname = 'Губка';
b.name ='Патрик';
b.surname = 'Звезда';
c.name ='Сквидварт';
c.surname ='Осьминог';
obja1.innerText = `a=${JSON.stringify(a)}`;
objb1.innerText = `b=${JSON.stringify(b)}`;
objc1.innerText = `c=${JSON.stringify(c)}`;
task01block.appendChild(obja1);
task01block.appendChild(objb1);
task01block.appendChild(objc1);
// different fields
// -------------УСЛОВИЕ-------------
// Добавьте некоторые другие поля (например age, fathername, sex (пол)) так, что бы набор полей отличался у разных объектов
// -------------РЕШЕНИЕ-------------
const task02block = document.createElement('div');
task02block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task02title = document.createElement('h2');
task02title.innerText = 'Task-02 Different fields';
const obja2 = document.createElement('p');
const objb2 = document.createElement('p');
const objc2 = document.createElement('p');
root.appendChild(task02block);
task02block.appendChild(task02title);
a.age = '25';
b.fathername = 'Патрикович';
c.sex = 'Мужчина';
obja2.innerText = `a=${JSON.stringify(a)}`;
objb2.innerText = `b=${JSON.stringify(b)}`;
objc2.innerText = `c=${JSON.stringify(c)}`;
task02block.appendChild(obja2);
task02block.appendChild(objb2);
task02block.appendChild(objc2);
// fields check
// -------------УСЛОВИЕ-------------
// Проверьте наличие необязательных полей у каждого из этих массивов.Если поле найдено, выведите его с помощью alert.
// Проверку делайте по typeof или in в if.
// -------------РЕШЕНИЕ-------------
const task03block = document.createElement('div');
task03block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task03title = document.createElement('h2');
task03title.innerText = 'Task-03 Fields check';
const checkBtn = document.createElement('button');
checkBtn.innerText = 'Check the fields';
checkBtn.style = 'margin-bottom:10px';
root.appendChild(task03block);
task03block.appendChild(task03title);
task03block.appendChild(checkBtn);
const combinePersons = [ a, b, c ];
a.id = 'a';
b.id = 'b';
c.id = 'c';
checkBtn.onclick = () => {
for (let person of combinePersons) {
for (let key in person) {
if (!(key === 'name' || key === 'surname'||key === 'id')) { alert(`В объекте {${person.id}} есть необязятельное поле '${key}'`) }
}
}
}
// array of persons
// -------------УСЛОВИЕ-------------
// Добавьте несколько ассоциативных массивов с персонами в обычный массив persons, например a, b, c.
// Также добавьте персону литерально({ ...}).Получится обычный массив с элементами - ассоциативными массивами с персонами.
// -------------РЕШЕНИЕ-------------
const task04block = document.createElement('div');
task04block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task04title = document.createElement('h2');
const obj4 = document.createElement('p');
task04title.innerText = 'Task-04 Array of persons';
root.appendChild(task04block);
task04block.appendChild(task04title);
let persons = [a, b, c];
persons = [...persons, { name: 'Ларри', surname: 'Лобстер' }];
obj4.innerText = `persons=${JSON.stringify(persons)}`;
task04block.appendChild(obj4);
// loop of persons
// -------------УСЛОВИЕ-------------
// Сделайте цикл, который выводит весь массив persons в форме объектов console.log(persons[i])
// -------------РЕШЕНИЕ-------------
const task05block = document.createElement('div');
task05block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task05title = document.createElement('h2');
task05title.innerText = 'Task-05 Loop of persons';
const objOutputBtn = document.createElement('button');
objOutputBtn.innerText = 'Start console output';
objOutputBtn.style = 'margin-bottom:10px';
root.appendChild(task05block);
task05block.appendChild(task05title);
task05block.appendChild(objOutputBtn);
objOutputBtn.onclick = () => {
for (let i = 0; i < persons.length; i++) { console.log({ ...persons[i] }) };
}
// loop of name and surname
// -------------УСЛОВИЕ-------------
// Сделайте цикл, который выводит весь массив persons, но только Имя и Фамилию каждой персоны.
// -------------РЕШЕНИЕ-------------
const task06block = document.createElement('div');
task06block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task06title = document.createElement('h2');
const task06comment = document.createElement('p');
task06comment.innerText = 'Как я поняла, нужно выводить не массивы Object.entries, а именно объекты с 2мя полями. Реализовала путем копирования данных в другой массив объектов и удаления ненужных полей. Или как надо было?';
task06title.innerText = 'Task-06 Loop of name and surname';
const objNameSurnameOutputBtn = document.createElement('button');
objNameSurnameOutputBtn.innerText = 'Start console Name&Surname output';
objNameSurnameOutputBtn.style = 'margin-bottom:10px';
root.appendChild(task06block);
task06block.appendChild(task06title);
task06block.appendChild(task06comment);
task06block.appendChild(objNameSurnameOutputBtn);
objNameSurnameOutputBtn.onclick = () => {
for (let i = 0; i < persons.length; i++) {
const subPersons = persons[i];
for (let key in subPersons) {
if (!(key==='name' || key==='surname'))
{ delete subPersons[key]}
}
console.log({ ...subPersons });
}
}
// loop of loop of values
// -------------УСЛОВИЕ-------------
// Сделайте цикл, который выводит весь массив persons, но только значения всех полей из объектов.
// Используйте вложенный цикл
// -------------РЕШЕНИЕ-------------
const task07block = document.createElement('div');
task07block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task07title = document.createElement('h2');
task07title.innerText = 'Task-07 Loop of loop of values';
const valuesOutputBtn = document.createElement('button');
valuesOutputBtn.innerText = 'Start consol values output';
valuesOutputBtn.style = 'margin-bottom:10px';
root.appendChild(task07block);
task07block.appendChild(task07title);
task07block.appendChild(valuesOutputBtn);
valuesOutputBtn.onclick = () => {
for (let i = 0; i < persons.length; i++) {
for (let value of Object.values(persons[i])) {
console.log(value);
}
}
}
// fullName
// -------------УСЛОВИЕ-------------
// Сделайте цикл, которых добавляет поле fullName в каждый объект, содержащий ФИО.
// Учтите, что поле fathername не является обязательным.
// -------------РЕШЕНИЕ-------------
const task08block = document.createElement('div');
task08block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task08title = document.createElement('h2');
const task08startArray = document.createElement('p');
task08startArray.innerText = `Начальный массив persons=${JSON.stringify(persons)}`;
task08title.innerText = 'Task-08 FullName';
const addFullNameBtn = document.createElement('button');
addFullNameBtn.innerText = 'Добавить поле fullName';
addFullNameBtn.style = 'margin-bottom:10px';
root.appendChild(task08block);
task08block.appendChild(task08title);
task08block.appendChild(task08startArray);
task08block.appendChild(addFullNameBtn);
addFullNameBtn.onclick = () => {
for (let i = 0; i < persons.length; i++) {
persons[i].fullname = persons[i].surname + ' ' + persons[i].name+((persons[i].fathername)?(" "+persons[i].fathername):'');
}
const task08finalArray = document.createElement('p');
task08finalArray.innerText = `Обновленный массив persons=${JSON.stringify(persons)}`;
task08block.appendChild(task08finalArray);
}
// serialize
// -------------УСЛОВИЕ-------------
// Создайте JSON-строку из persons
// -------------РЕШЕНИЕ-------------
const task09block = document.createElement('div');
task09block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task09title = document.createElement('h2');
task09title.innerText = 'Task-09 Serialize';
const convertJSONBtn = document.createElement('button');
convertJSONBtn.innerText = 'Вывести JSON-строку persons в консоль';
convertJSONBtn.style = 'margin-bottom:10px';
root.appendChild(task09block);
task09block.appendChild(task09title);
task09block.appendChild(convertJSONBtn);
convertJSONBtn.onclick = () => {
console.log(JSON.stringify(persons));
}
// deserialize
// -------------УСЛОВИЕ-------------
// Создайте ассоциативный массив с одной персоной из JSON-строки. Добавьте её в persons
// -------------РЕШЕНИЕ-------------
const task10block = document.createElement('div');
task10block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task10title = document.createElement('h2');
task10title.innerText = 'Task-10 Deserialize';
const addJsonBtn = document.createElement('button');
addJsonBtn.innerText = 'Добавить JSON-персону в persons';
addJsonBtn.style = 'margin-bottom:10px';
root.appendChild(task10block);
task10block.appendChild(task10title);
task10block.appendChild(addJsonBtn);
addJsonBtn.onclick = () => {
const jsonPerson = '{ "name": "Сэнди", "surname": "Белка" }';
console.log(jsonPerson);
persons.push(JSON.parse(jsonPerson));
console.log(persons);
const task10persons = document.createElement('p');
task10persons.innerText = `newPersons=${JSON.stringify(persons)}`;
task10block.appendChild(task10persons);
}
// HTML
// -------------УСЛОВИЕ-------------
// Сделайте цикл, который выводит весь массив persons, в форме HTML-таблицы. Имя и Фамилия - колонки.
// Пример кода:
// var str = "
"
// for (let i=0;i<1;i++){
// str += `${i} | адын |
`
// }
// str += "
"
// console.log(str)
// document.write(str)
// Модифицируйте код так, чтобы он выводил массив persons
// -------------РЕШЕНИЕ-------------
const task11block = document.createElement('div');
task11block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task11title = document.createElement('h2');
task11title.innerText = 'Task-11 HTML';
const makeTableBtn = document.createElement('button');
makeTableBtn.innerText = 'Сформировать таблицу';
makeTableBtn.style = 'margin-bottom:11px';
root.appendChild(task11block);
task11block.appendChild(task11title);
task11block.appendChild(makeTableBtn);
makeTableBtn.onclick = () => {
var str = "Persons№ | Name | Surname | "
for (let i=0;i ${i+1}  |  ${persons[i].name}  |  ${persons[i].surname}  |
`
}
str += "
"
const task11table = document.createElement('div');
task11table.innerHTML = str;
console.log(str);
task11block.appendChild(task11table);
}
// HTML optional fields
// -------------УСЛОВИЕ-------------
// Сделайте цикл, который выводит весь массив persons, в форме HTML - таблицы.
// Имя и Фамилия, а также другие поля при наличии. Колонки: поля, строки таблицы - персоны.
// -------------РЕШЕНИЕ-------------
const task12block = document.createElement('div');
task12block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task12title = document.createElement('h2');
task12title.innerText = 'Task-12 HTML optional fields';
const makeAllFieldsTableBtn = document.createElement('button');
makeAllFieldsTableBtn.innerText = 'Сформировать таблицу с полным перечнем полей';
makeAllFieldsTableBtn.style = 'margin-bottom:12px';
root.appendChild(task12block);
task12block.appendChild(task12title);
task12block.appendChild(makeAllFieldsTableBtn);
makeAllFieldsTableBtn.onclick = () => {
var str = "Persons№ | ";
let keys = [];
let result = [];
for (let i = 0; i < persons.length; i++) {
keys = Object.keys(persons[i]);
result = [...result, ...keys];
}
keys=[...new Set(result)];
for (let key of keys) {
str += `${key} | `;
}
str += `
`;
for (let i = 0; i < persons.length; i++){
str += `  person ${i + 1}  | `;
for (let key of keys) {
(Object.keys(persons[i]).includes(key))?(str += ` ${persons[i][key]}  | `):(str += ` ---  | `);
};
str += `
`;
}
str += "
"
const task12table = document.createElement('div');
task12table.innerHTML = str;
task12block.appendChild(task12table);
}
// HTML tr color
// -------------УСЛОВИЕ-------------
// Добавьте к предыдущему примеру раскраску через строчку используя другой стиль тэга tr.
// -------------РЕШЕНИЕ-------------
const task13block = document.createElement('div');
task13block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task13title = document.createElement('h2');
task13title.innerText = 'Task-13 HTML tr color';
const makeColorTrTableBtn = document.createElement('button');
makeColorTrTableBtn.innerText = 'Form colorful table';
makeColorTrTableBtn.style = 'margin-bottom:13px';
root.appendChild(task13block);
task13block.appendChild(task13title);
task13block.appendChild(makeColorTrTableBtn);
makeColorTrTableBtn.onclick = () => {
var str = "Persons№ | ";
let keys = [];
let result = [];
for (let i = 0; i < persons.length; i++) {
keys = Object.keys(persons[i]);
result = [...result, ...keys];
}
keys=[...new Set(result)];
for (let key of keys) {
str += `${key} | `;
}
str += `
`;
for (let i = 0; i < persons.length; i++){
i%2?(str += `  person ${i + 1}  | `):(str += `
  person ${i + 1}  | `);
for (let key of keys) {
(Object.keys(persons[i]).includes(key))?(str += ` ${persons[i][key]}  | `):(str += ` ---  | `);
};
str += `
`;
}
str += "
"
const task13table = document.createElement('div');
task13table.innerHTML = str;
task13block.appendChild(task13table);
}
// HTML th optional
// -------------УСЛОВИЕ-------------
// Переработайте вывод persons в HTML с поиском всех возможных колонок во всех записях,
// выводом названий колонок в заголовок HTML - таблицы.Для решения этой задачи вначале узнайте множество полей(ключей)
// во всех записях(они не совпадают), выведите HTML - заголовок используя тэги < th >, а потом выводите все записи.
// Ниже выведите все персоны построчно.Следите за корректностью колонок.Для этого вам нужно итерировать общий набор колонок,
// а не каждую персону, колонки из которой могут отличаться от предыдущей.
// -------------РЕШЕНИЕ-------------
const task14block = document.createElement('div');
task14block.style = "border: 2px solid green; border-radius:5px; margin-bottom:10px; padding:10px";
const task14title = document.createElement('h2');
const task14comment = document.createElement('p');
task14title.innerText = 'Task-14 HTML th optional';
task14comment.innerText = 'Не поняла, чем отличается от 12-го задания (в нем сделала то же самое)';
const formTable14Btn = document.createElement('button');
formTable14Btn.innerText = 'Сформировать таблицу';
formTable14Btn.style = 'margin-bottom:14px';
root.appendChild(task14block);
task14block.appendChild(task14title);
task14block.appendChild(task14comment);
task14block.appendChild(formTable14Btn);
formTable14Btn.onclick = () => { var str = "Persons№ | ";
let keys = [];
let result = [];
for (let i = 0; i < persons.length; i++) {
keys = Object.keys(persons[i]);
result = [...result, ...keys];
}
keys=[...new Set(result)];
for (let key of keys) {
str += `${key} | `;
}
str += `
`;
for (let i = 0; i < persons.length; i++){
str += `  person ${i + 1}  | `;
for (let key of keys) {
(Object.keys(persons[i]).includes(key))?(str += ` ${persons[i][key]}  | `):(str += ` ---  | `);
};
str += `
`;
}
str += "
"
const task14table = document.createElement('div');
task14table.innerHTML = str;
task14block.appendChild(task14table); }