// Материал
// Просмотрите, запустите и внимательно проанализируйте все примеры кода из материала лекции.
{
// сделано
}
// 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 = ''
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 = `
`
str += `
`
for (const currency of currencies) {
str += `
${currency}
`
}
str += `
`
// создали таблицу с кросс-курсами
let i = 0
for (const [key, value] of Object.entries(data.rates)) {
str += (i % 2) ? `
` : `
`
i++
// str += `
`
str += `
${key}
`
for (const num of Object.values(data.rates)) {
str += `
${(num / value).toFixed(2)}
`
}
str += `
`
}
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 = ``
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 = `
`
str += `
`
for (let key of keys) {
str += `
${key}
`
}
str += `
`
// Второй проход - отображение таблицы
for (const child of persons) {
str += `