// Материал
// Как обычно, запустите все примерчики из материала занятия, разберитесь что там и как работает, возьмите отладчик / консоль и поиграйтесь с ними.походу возможно найдутся ошибки, сообщите мне о них пожалуйста
{
// сделано
}
// Temperature
// Оформите Temperature как функцию, в которую параметром передается температура в одной системе, а возвращается в другой.Никаких prompt и console.log в коде быть не должно, если вы хотите в дальнейшем пользоваться этой функцией где угодно в коде удобно.Нужен ли блок кода в функции для решения этой задачи ?
{
const functionTemperature = (temperature, unit) => {
let k
unit.toLowerCase() === 'цельсий' ? k = 0 : unit.toLowerCase() === 'фаренгейт' ? k = 1 : alert('Вы ввели неправильну единицу измерения. Перепроверьте написание!')
const temperatureConvertKelvin = `Указанная Вами температура соответствует: ${(1.8 * +temperature * (k + 1) + 32).toFixed(2)} в градусах Фаренгейта`
const temperatureConvertCelsiy = `Указанная Вами температура соответствует: ${((+temperature - 32) / 1.8 * k).toFixed(2)} в градусах Цельсия`
unit.toLowerCase() === 'цельсий' ? alert(temperatureConvertKelvin) : unit.toLowerCase() === 'фаренгейт' ? alert(temperatureConvertCelsiy) : alert('Один или несколько параметров введены неправильно')
}
functionTemperature(prompt('Укажите любое значение температуры (цифрами)'), prompt('Введите единицу измерения: Цельсий/Фаренгейт'))
}
// RGB
// Оформите Number: RGB как функцию, в которую параметрами передаются три числа(r, g, b) => . Функция должна возвращать строку в нотации #RRGGBB.Используя условия или тернарный оператор добейтесь что бы в результате всегда было 7 символов, даже когда значение цвета меньше 15ти.Нужен ли блок кода этой функции ?
{
const colorConverter = ([red, green, blue]) => alert('Указанный Вами цвет для CSS: #' +
((+red) > 255 ? alert('Слишком большая цифра') : ((+red) < 16 ? + '0' + (+red).toString(16).toUpperCase() : (+red).toString(16).toUpperCase())) +
((+green) > 255 ? alert('Слишком большая цифра') : ((+green) < 16 ? + '0' + (+green).toString(16).toUpperCase() : (+green).toString(16).toUpperCase())) +
((+blue) > 255 ? alert('Слишком большая цифра') : ((+blue) < 16 ? + '0' + (+blue).toString(16).toUpperCase() : (+blue).toString(16).toUpperCase())))
colorConverter(['Введите целое число 0 ... 255 для красного цвета', 'Введите целое число 0 ... 255 для зеленого цвета', 'Введите целое число 0 ... 255 для синего цвета'].map(prompt))
}
// Flats
// Оформите Number: flats как функцию.Продумайте достаточное количество параметров для решения задачи.Функция должна возвращать объект вида { entrance, floor }, где entrance - номер падика, floor - номер этажа на котором находится квартира.
{
const numberFlats = ([numberOfFloors, numberOfFlats, searchingFlat]) => {
const numberFlats = {}
const searchingEntrance = Math.ceil(searchingFlat / ((+numberOfFloors) * +numberOfFlats))
const searchingFloor = Math.ceil((+searchingFlat) / (+numberOfFlats) - (+numberOfFloors) * (searchingEntrance - 1))
numberFlats.entrance = searchingEntrance
numberFlats.floor = searchingFloor
return numberFlats
}
numberFlats(['Введите количество этажей в доме:', 'Введите количество квартир на этаже:', 'Введите номер квартиры, которую нунжно найти:'].map(prompt))
}
// Credentials
// Оформите задание String: credentials как функцию без параметров.Используйте функцию capitalize из домашнего задания по массивам.Функция должна содержать вызовы prompt и возвращать объект вида { name, surname, fatherName, fullName }
{
const enterPersonData = () => {
const arr = {}
const name = (prompt('Ввеедиет Ваше Имя в поле ниже')).trim()
arr.name = `${name[0].toUpperCase()}${name.slice(1).toLowerCase()}`
const surname = (prompt('Ввеедиет Вашу Фамилию в поле ниже')).trim()
arr.surname = `${surname[0].toUpperCase()}${surname.slice(1).toLowerCase()}`
const fatherName = (prompt('Ввеедиет Ваше Отчество в поле ниже')).trim()
arr.fatherName = `${fatherName[0].toUpperCase()}${fatherName.slice(1).toLowerCase()}`
const fullName = `${name[0].toUpperCase()}${name.slice(1).toLowerCase()} ${surname[0].toUpperCase()}${surname.slice(1).toLowerCase()} ${fatherName[0].toUpperCase()}${fatherName.slice(1).toLowerCase()}`
arr.fullName = fullName
return arr
}
enterPersonData()
}
// New line
// Оформите задание String: new line как функцию с параметром - строкой.Функция должна возвращать строку с настоящими переносами.
{
const string = (str) => str.split('\\n').join('\n')
alert(string(prompt('Введите в поле ниже любую строку. Для перехода на новую строку используйте комбинацию: \n')))
}
// Prompt OR
// Оформите задание Prompt: OR как функцию, которая принимает строку для prompt и значение по умолчанию.Функция должна возвращать введенный текст или значение по умолчанию в случае отказа пользователя вводить что - либо.Используйте функцию без блока кода(функцию в одно выражение)
{
// const defaultValue =
const age = (insertData, defaultValue) => insertData !== null && insertData !== '' ? `Вы родились в ${2022 - +insertData} году` : defaultValue
alert(age(prompt('Укажите в поле, сколько вам полных лет (цифрами):'), 'Вы не ввели ваш возраст!'))
}
// Login And Password
// Оформите задание Login And Password как функцию, которая принимает два параметра - правильный логин и пароль и возвращает true если логин и пароль введенные пользователями верны, или false если пользователь не смог.
{
const autorization = (login, pass) => login === 'admin' && pass === 'qwerty'
autorization(prompt('Введите в поле ниже логин'), prompt('Введите пароль в поле нижне'))
}
// For Table
// Оформите задание For Multiply Table как функцию, которая принимает любой массив с массивами, а возвращает строку HTML с тэгом < table > и всякими tr и td.
{
newArr = [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12], [0, 4, 8, 12, 16]]
const table = (arr) => {
let i = 0
let str = `
`
for (let string of arr) {
str += (i % 2) ? `` : `
`
i++
for (let number of string) {
str += `${number} | `
}
str += `
`
}
str += `
`
return str
}
table(newArr)
}
// Filter Lexics
// Оформите задание Filter Lexics как функцию, принимающую любую строку для проверки и массив некорректных слов(['бляха', 'муха', "пляха", "шабля"], например).Функция должна возвращать строку без этих некорректных слов.
{
const string = 'Скоро бляха зима, ни одна муха на улицу не вылетит. Пляха - это шото, а шабля - это мощное оружие'
const badWords = ['бляха', 'муха', "пляха", "шабля"]
const checkString = (str, badArr) => {
const result = str.toLowerCase().split(' ').filter(x => !badArr.includes(x) ? x : '')
return result.join(' ')
}
checkString(string, badWords)
}
// Currency Table
// Оформите задание Currency Table как функцию, без параметров, которая складывает полученные данные во внутренний двумерный массив, после чего отображает его используя функцию из задания For Table
{
const arrTable = () => {
fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
.then(data => {
const arrRow = []
for (let [key, value] of Object.entries(data.rates)) {
const arrData = []
arrData.push(key)
for (let num of Object.values(data.rates)) {
arrData.push(+((num / value).toFixed(4)))
}
arrRow.push(arrData)
}
const table = (arr) => {
let i = 0
const currencies = []
for (const currency in data.rates) {
currencies.push(currency)
}
// table header
let str = ``
str += ` | `
for (const currency of currencies) {
str += `${currency} | `
}
str += `
`
// table body
for (let string of arr) {
str += !(i % 2) ? `` : `
`
i++
for (let number of string) {
str += `${number} | `
}
str += `
`
}
str += `
`
return str
}
document.write(table(arrRow))
})
}
arrTable()
}
// Form
// Оформите задание Form как функцию, которая принимает любой объект как параметр и создает форму на экране.
{
const enterForm = (insertObject) => {
let str = ``
return document.write(str)
}
// Объект для теста
const car = {
"Name": "chevrolet chevelle malibu",
"Cylinders": 8,
"Displacement": 307,
"Horsepower": 130,
"Weight_in_lbs": 3504,
"Origin": "USA",
"in_production": false
}
enterForm(car)
}
// Array of objects sort
// Сделайте обобщенную функцию сортировки массива с объектами
// Функция позволяет отсортировать любой набор данных по имени поля(второй параметр).Третьим параметром идет необязательный Boolean, который в случае true делает сортировку по возрастанию, в случае false - по убыванию.По умолчанию(без третьего параметра) происходит сортировка по возрастанию.
{
const persons = [
{ name: "Иван", age: 17 },
{ name: "Мария", age: 35 },
{ name: "Алексей", age: 73 },
{ name: "Яков", age: 12 },
{ name: "Семен", age: 24 },
{ name: "Антон", age: 2 },
{ name: "Петр", age: 102 },
{ name: "Николай", age: 44 }
]
const sort = (sortArr, sortKey, sortOrder) => {
const sortFunction = (a, b) => {
if (sortOrder !== false) {
return a[sortKey] > b[sortKey] ? 1 : -1;
} else {
return a[sortKey] > b[sortKey] ? -1 : 1;
}
}
const newSortArr = sortArr.slice().sort(sortFunction)
return newSortArr
}
console.log(`Сортировка по возрасту (по возрастанию):`, sort(persons, "age"))
console.log(`Сортировка по имени (по убыванию):`, sort(persons, "name", false))
}
// Table
// Оформите задание Table как функцию, которая принимает следующие параметры: //done
// a. любой массив объектов для отображения //done
// b. поле, по которому сортировать //done
// c. порядок сортировки(убывание / возрастание) //done
// Перед отображением:
// a. скопируйте исходный массив, что бы сортировка не изменила оригинал;
// b. отсортируйте с помощью функции из предыдущего задания
// c. Отображение возьмите из задания Table
{
const persons = [
{
name: 'Мария',
fatherName: 'Ивановна',
surname: 'Иванова',
sex: 'female',
// married: true,
// age: 27
},
{
name: 'Николай',
fatherName: 'Иванович',
surname: 'Иванов',
age: 15,
// sex: 'male',
// married: false,
},
{
name: 'Петр',
fatherName: 'Иванович',
surname: 'Иванов',
married: true,
// sex: 'male',
// age: 31
}
]
const sort = (sortArr, sortKey, sortOrder) => {
// copy origin arr
let newSortArr = sortArr.slice()
// sorting arr
const sortFunction = (a, b) => {
if (sortOrder !== false) {
return a[sortKey] > b[sortKey] ? 1 : -1;
} else {
return a[sortKey] > b[sortKey] ? -1 : 1;
}
}
newSortArr.sort(sortFunction)
// create arr with items of header
const keys = []
for (const child of newSortArr) {
for (const key in child) {
if (!keys.includes(key)) {
keys.push(key);
}
}
}
// create table header
let str = ``
for (let key of keys) {
str += `${key} | `
}
str += `
`
// create table body
for (const child of newSortArr) {
str += ``
for (const num of keys) {
str += `${(Object.keys(child)).includes(num) ? child[num] : ''} | `
}
str += `
`
}
str += `
`
// output table data
document.write(str)
return newSortArr
}
sort(persons, "name", false)
console.log(`Исходный массив`, persons)
}
// Divide
// Реализуйте задание Number: divide в HTML:
{
// реализовано в HTML файле HW07.html
}
// Calc Func
// Вспомните первое ДЗ по Javascript, в котором вы делали всякие расчеты используя код на Javascript.Оформите это как функцию:
// найдите все входящие данные, сделайте из них параметры
// найдите переменную с результатом расчетов и сделайте так, что бы ваша функция возвращала этот результат.
// Если результатов несколько, создайте объект из этих результатов и верните его.
{
const params = [
{
period: "day",
lightUse: 100,
rate: 144,
},
{
period: "night",
lightUse: 100,
rate: 144,
},
{
daysInMonth: 30
}
]
const dataElectrisity = (arr) => {
const result = {}
result.priceDay = (arr[0].lightUse * arr[0].rate * (arr[0].period === 'day' ? 1 : 0.5)) / 100
result.priceNigth = (arr[1].lightUse * arr[1].rate * (arr[1].period === 'day' ? 1 : 0.5)) / 100
result.priceMonth = result.priceDay + result.priceNigth
result.usePerDay = +((arr[0].lightUse + arr[1].lightUse) / arr[2].daysInMonth).toFixed(2)
return result
}
dataElectrisity(params)
}
// Calc Live
// Используя пример из задания Divide и функцию из Calc Func сделайте несколько полей ввода в HTML, меняя которые вы будете получать результат калькуляции в каком - то div.
{
// реализовано в HTML файле HW07.html
}