123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647 |
- // Материал
- // Просмотрите, запустите и внимательно проанализируйте все примеры кода из материала лекции.
- {
- // сделано
- }
- // Literals
- // Найдите несколько окружающих объектов реального мира и создайте соответственные объекты Javascript.Например:
- {
- const flover = {
- type: 'palm',
- height: 150,
- color: 'green'
- }
- const dog = {
- type: 'york',
- sex: 'female',
- color: 'red'
- }
- const wife = {
- type: 'creator',
- sex: 'female',
- height: 165
- }
- }
- // Literals expand
- // Дайте возможность пользователю добавить любые два свойства в эти объекты с любыми значениями.Обеспечьте ввод названия ключа и значения через prompt прямо в литерале объекта { }
- {
- const flover = {
- type: 'palm',
- height: 150,
- color: 'green',
- [prompt('Введите первый параметр для объекта "Цветок"')]: prompt('Введите описание этого параметра'),
- [prompt('Введите второй параметр для объекта "Цветок"')]: prompt('Введите описание этого параметра')
- }
- const dog = {
- type: 'york',
- sex: 'female',
- color: 'red',
- [prompt('Введите первый параметр для объекта "Собака"')]: prompt('Введите описание этого параметра'),
- [prompt('Введите второй параметр для объекта "Собака"')]: prompt('Введите описание этого параметра')
- }
- const wife = {
- type: 'creator',
- sex: 'female',
- height: 165,
- [prompt('Введите первый параметр для объекта "Жена"')]: prompt('Введите описание этого параметра'),
- [prompt('Введите второй параметр для объекта "Жена"')]: prompt('Введите описание этого параметра')
- }
- }
- // Literals copy
- // Пусть пользователь введет еще одно свойство в переменную.Вставьте в новый объект эту переменную.Скопируйте объект из предыдущего задания в новый объект.
- {
- const flover = {
- type: 'palm',
- height: 150,
- color: 'green'
- }
- const dog = {
- type: 'york',
- sex: 'female',
- color: 'red'
- }
- const wife = {
- type: 'creator',
- sex: 'female',
- height: 165
- }
- const newObj = { ...flover }
- newObj[prompt('Введите имя ключа в поле ниже')] = prompt('Введите значение для указанного ранее ключа')
- console.log(newObj)
- }
- // Html tree
- // Сделайте декларативную JSON - структуру для тэгов выше, в которой:
- // каждый тэг будет объектом
- // имя тэга будет полем tagName
- // вложенные тэги будут в поле children
- // набор аттрибутов тэга будет в поле attrs.
- // Выведите значения текста во второй кнопке, используя.и[].
- // Выведите значение атрибута id во втором input, используя.и[].
- {
- const dataInput = {
- tagName: 'body',
- children: [
- {
- tagName: 'div',
- children: [
- {
- tagName: 'span',
- children: ['Enter a data please:']
- },
- {
- tagName: 'br'
- },
- {
- tagName: 'input',
- attrs: {
- type: 'text',
- id: 'name'
- }
- },
- {
- tagName: 'input',
- attrs: {
- type: 'text',
- id: 'surname'
- }
- }
- ]
- },
- {
- tagName: 'div',
- children: [
- {
- tagName: 'button',
- attrs: {
- id: 'ok'
- },
- children: ['OK']
- },
- {
- tagName: 'button',
- attrs: {
- id: 'cancel'
- },
- children: ['Cancel']
- }
- ]
- }
- ]
- }
- console.log(dataInput.children[1].children[1].children[0])
- console.log(dataInput.children[0].children[3].attrs.id)
- }
- // Parent
- // Добавьте каждому объекту тэга из предыдущего задания связь с родителем, используя свойство parent и присвоение
- {
- const dataInput = {
- tagName: 'body',
- children: [
- {
- tagName: 'div',
- children: [
- {
- tagName: 'span',
- children: ['Enter a data please:']
- },
- {
- tagName: 'br'
- },
- {
- tagName: 'input',
- attrs: {
- type: 'text',
- id: 'name'
- }
- },
- {
- tagName: 'input',
- attrs: {
- type: 'text',
- id: 'surname'
- }
- }
- ]
- },
- {
- tagName: 'div',
- children: [
- {
- tagName: 'button',
- attrs: {
- id: 'ok'
- },
- children: ['OK']
- },
- {
- tagName: 'button',
- attrs: {
- id: 'cancel'
- },
- children: ['Cancel']
- }
- ]
- }
- ]
- }
- dataInput.children[0].father = dataInput
- dataInput.children[1].father = dataInput
- dataInput.children[0].children[0].father = dataInput.children[0]
- dataInput.children[0].children[1].father = dataInput.children[0]
- dataInput.children[0].children[2].father = dataInput.children[0]
- dataInput.children[0].children[3].father = dataInput.children[0]
- dataInput.children[1].children[0].father = dataInput.children[1]
- dataInput.children[1].children[1].father = dataInput.children[1]
- }
- // Change OK
- // Добавьте(или измените) любой введенный пользователем атрибут тэга < button id = 'ok' > из задания HTML Tree.Пользователь также вводит значение этого атрибута.
- {
- const dataInput = {
- tagName: 'body',
- children: [
- {
- tagName: 'div',
- children: [
- {
- tagName: 'span',
- children: ['Enter a data please:']
- },
- {
- tagName: 'br'
- },
- {
- tagName: 'input',
- attrs: {
- type: 'text',
- id: 'name'
- }
- },
- {
- tagName: 'input',
- attrs: {
- type: 'text',
- id: 'surname'
- }
- }
- ]
- },
- {
- tagName: 'div',
- children: [
- {
- tagName: 'button',
- attrs: {
- id: 'ok'
- },
- children: ['OK']
- },
- {
- tagName: 'button',
- attrs: {
- id: 'cancel'
- },
- children: ['Cancel']
- }
- ]
- }
- ]
- }
- dataInput.children[1].children[0].attrs[prompt('ВВедите любой атрибут для тега "button"')] = prompt('Введите значение для этого атрибута')
- console.log(dataInput.children[1].children[0].attrs)
- }
- // Destructure
- // Используя деструктуризацию структуры из задания HTML Tree, Выведите значения текста в тэге span, Выведите значения текста во второй кнопке и Выведите значение атрибута id во втором input.
- {
- const dataInput = {
- tagName: 'body',
- children: [
- {
- tagName: 'div',
- children: [
- {
- tagName: 'span',
- children: ['Enter a data please:']
- },
- {
- tagName: 'br'
- },
- {
- tagName: 'input',
- attrs: {
- type: 'text',
- id: 'name'
- }
- },
- {
- tagName: 'input',
- attrs: {
- type: 'text',
- id: 'surname'
- }
- }
- ]
- },
- {
- tagName: 'div',
- children: [
- {
- tagName: 'button',
- attrs: {
- id: 'ok'
- },
- children: ['OK']
- },
- {
- tagName: 'button',
- attrs: {
- id: 'cancel'
- },
- children: ['Cancel']
- }
- ]
- }
- ]
- }
- const { children: [{ children: [{ children: [span] }] }] } = dataInput
- console.log(span)
- const { children: [, { children: [, { children: [button] }] }] } = dataInput
- console.log(button)
- const { children: [{ children: [, , , { attrs: { id } }] }] } = dataInput
- console.log(id)
- }
- // Destruct array
- // напишите код, который используя деструктуризацию положит:
- // четные числа в переменные even1, even2,
- // нечетные в odd1, odd2, odd3,
- // буквы в отдельный массив
- {
- let arr = [1, 2, 3, 4, 5, "a", "b", "c"]
- const [odd1, even1, odd2, even2, odd3, ...letters] = arr
- console.log(even1, even2, odd1, odd2, odd3, letters)
- }
- // Destruct string
- // напишите код, который используя деструктуризацию положит:
- // число в переменную number
- // букву a в переменную s1
- // букву b в переменную s2
- // букву c в переменную s3
- {
- let arr = [1, "abc"]
- const [number, [s1, s2, s3]] = arr
- console.log(number, s1, s2, s3)
- }
- // Destruct 2
- // извлеките используя деструктуризацию имена детей в переменные name1 и name2
- {
- let obj = {
- name: 'Ivan',
- surname: 'Petrov',
- children: [{ name: 'Maria' }, { name: 'Nikolay' }]
- }
- const { children: [{ name: name1 }, { name: name2 }] } = obj
- console.log(name1)
- console.log(name2)
- }
- // Destruct 3
- // извлеките используя деструктуризацию объектов два первых элемента и длину массива в переменные a, b и length
- {
- let arr = [1, 2, 3, 4, 5, 6, 7, 10]
- const { 0: a, 1: b, length } = arr
- console.log(a)
- console.log(b)
- console.log(length)
- }
- // Copy delete
- // Сделайте копию одного из объектов из задания Literals без ключа, который введет пользователь.
- {
- const flover = {
- type: 'palm',
- height: 150,
- color: 'green',
- [prompt('Введите первый параметр для объекта "Цветок"')]: prompt('Введите описание этого параметра'),
- [prompt('Введите второй параметр для объекта "Цветок"')]: prompt('Введите описание этого параметра')
- }
- const { type, height, color, ...rest } = flover
- const floverCopy = { type, height, color }
- console.log(floverCopy)
- console.log(flover === floverCopy)
- }
- // Currency real rate
- // Ниже приведен код, который скачивает актуальную информацию о курсах валют.Скопируйте ссылку из него вставьте в браузер интереса ради.Реализуйте калькулятор обмена валют следующим образом:
- // Пользователь вводит исходную валюту
- // Пользователь вводит валюту, в которую происходит конвертация
- // Пользователь вводит сумму в исходной валюте
- // Пользовател видит результат конвертации
- // Учтите, что пользователь может ввести какую - то дичь или название валют в неверном регистре
- {
- fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
- .then(data => {
- let startCurrency = prompt('Введите исходную валюту').toUpperCase()
- startCurrency = startCurrency in data.rates ? startCurrency : alert('такая валюта не поддерживается')
- let finishCurrency = prompt('Введите конечную валюту').toUpperCase()
- finishCurrency = finishCurrency in data.rates ? finishCurrency : alert('такая валюта не поддерживается')
- const summ = prompt('Введите сумму для обмена в исходной валюте')
- const { rates: { [startCurrency]: startCurrencValue } } = data
- const { rates: { [finishCurrency]: finishCurrencValue } } = data
- const result = (startCurrency === 'USD' ? summ * finishCurrencValue / startCurrencValue : summ * finishCurrencValue / startCurrencValue).toFixed(2)
- alert(isNaN(result) ? 'Вы ввели неправильно один или несколько араметров' : result)
- console.log(data) //изучите структуру, получаемую с сервера в консоли
- })
- }
- // Currency drop down
- // Сделайте выпадающий список с названиями всех валют, используя код из прошлого задания и накопление HTML - тэгов в строковой переменной.Для выпадающих списков в HTML предусмотрены тэги < select > и < option >
- {
- fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
- .then(data => {
- const currencies = Object.keys(data.rates)
- let str = '<select>'
- for (let currency of currencies) {
- str += `<option>${currency}</option>`
- }
- str += '</select>'
- document.write(str)
- console.log(data) //изучите структуру, получаемую с сервера в консоли
- })
- }
- // Currency table
- // Сделайте двумерную таблицу с курсами между всеми возможными парами валют по типу таблицы Пифагора, используя заготовку из задания Currency real rate:
- // Используйте только один запрос на сервер.Используйте расчет кросскурса для вычисления курса между любой парой валют
- {
- fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
- .then(data => {
- // создали массив заголовков-названий валют
- const currencies = []
- for (const currency in data.rates) {
- currencies.push(currency)
- }
- // создали строку заголовков валют
- let str = `<table style="text-align: center; border-collapse: collapse">`
- str += `<tr><td></td>`
- for (const currency of currencies) {
- str += `<td style="padding: 5px 10px;background-color: grey;">${currency}</td>`
- }
- str += `</tr>`
- // создали таблицу с кросс-курсами
- let i = 0
- for (const [key, value] of Object.entries(data.rates)) {
- str += (i % 2) ? `<tr style = "background-color:#0000001f">` : `<tr>`
- i++
- // str += `<tr>`
- str += `<td style="background-color: grey;">${key}</td>`
- for (const num of Object.values(data.rates)) {
- str += `<td style="padding: 5px 10px;">${(num / value).toFixed(2)}</td>`
- }
- str += `</tr>`
- }
- document.write(str)
- })
- }
- // Form
- // Напишите код, который их любого объекта создает форму HTML.Например для такого объекта
- // На экране должна появиться форма из 7 строк, с названиями полей, взятыми из ключей и полями ввода соответствующих типов.Значениями полей ввода должны быть значения из объекта.
- // Для создания правильного типа тэга input используйте оператор typeof Javascript:
- {
- const car = {
- "Name": "chevrolet chevelle malibu",
- "Cylinders": 8,
- "Displacement": 307,
- "Horsepower": 130,
- "Weight_in_lbs": 3504,
- "Origin": "USA",
- "in_production": false
- }
- let str = `<form>`
- for (let [key, value] of Object.entries(car)) {
- str += `<label>${key}: <input type="${typeof value === 'string' ? 'text' : typeof value === 'number' ? 'number' : 'checkbox'}" value="${value}" /></label></br></br>`
- }
- str += `</form>`
- document.write(str)
- }
- // Table
- // Даден любой массив с объектами
- // Сформировать таблицу(используя накопление тэгов HTML в строке):
- {
- const persons = [
- {
- name: 'Мария',
- fatherName: 'Ивановна',
- surname: 'Иванова',
- sex: 'female'
- },
- {
- name: 'Николай',
- fatherName: 'Иванович',
- surname: 'Иванов',
- age: 15
- },
- {
- name: 'Петр',
- fatherName: 'Иванович',
- surname: 'Иванов',
- married: true
- },
- ]
- // Первый проход - поиск колонок
- const keys = []
- for (const child of persons) {
- for (const key in child) {
- if (!keys.includes(key)) {
- keys.push(key);
- }
- }
- }
- // Заголовок
- let str = `<table style="border-collapse: collapse; text-align: center;">`
- str += `<tr style="background-color: grey;">`
- for (let key of keys) {
- str += `<td style="border: 1px solid black; padding: 5px 10px">${key}</td>`
- }
- str += `</tr>`
- // Второй проход - отображение таблицы
- for (const child of persons) {
- str += `<tr>`
- for (const num of keys) {
- str += `<td style="border: 1px solid black; padding: 5px 10px">${(Object.keys(child)).includes(num) ? child[num] : ''}</td>`
- }
- str += `</tr>`
- }
- str += `</table>`
- document.write(str)
- }
- // Тестовые данные
- {
- const persons = [
- {
- "Name": "chevrolet chevelle malibu",
- "Cylinders": 8,
- "Displacement": 307,
- "Horsepower": 130,
- "Weight_in_lbs": 3504,
- "Origin": "USA"
- },
- {
- "Name": "buick skylark 320",
- "Miles_per_Gallon": 15,
- "Cylinders": 8,
- "Displacement": 350,
- "Horsepower": 165,
- "Weight_in_lbs": 3693,
- "Acceleration": 11.5,
- "Year": "1970-01-01",
- },
- {
- "Miles_per_Gallon": 18,
- "Cylinders": 8,
- "Displacement": 318,
- "Horsepower": 150,
- "Weight_in_lbs": 3436,
- "Year": "1970-01-01",
- "Origin": "USA"
- },
- {
- "Name": "amc rebel sst",
- "Miles_per_Gallon": 16,
- "Cylinders": 8,
- "Displacement": 304,
- "Horsepower": 150,
- "Year": "1970-01-01",
- "Origin": "USA"
- },
- ]
- const keys = []
- for (const child of persons) {
- for (const key in child) {
- if (!keys.includes(key)) {
- keys.push(key);
- }
- }
- }
- let str = `<table style="border-collapse: collapse; text-align: center;">`
- str += `<tr style="background-color: grey;">`
- for (let key of keys) {
- str += `<td style="border: 1px solid black; padding: 5px 10px">${key}</td>`
- }
- str += `</tr>`
- for (const child of persons) {
- str += `<tr>`
- for (const num of keys) {
- str += `<td style="border: 1px solid black; padding: 5px 10px">${(Object.keys(child)).includes(num) ? child[num] : ''}</td>`
- }
- str += `</tr>`
- }
- str += `</table>`
- document.write(str)
- }
|