123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583 |
- // Arrow to Functions
- // Переведите любые пять заданий из предыдущего ДЗ по функциям в синтаксис function
- arrow_to_functions: {
- function rgb(r, g, b) {
- let color = '#' + (r > 15 ? r.toString(16) : '0' + r.toString(16)) +
- (g > 15 ? g.toString(16) : '0' + g.toString(16)) +
- (b > 15 ? b.toString(16) : '0' + b.toString(16));
- return color;
- }
- console.log(rgb(5, 5, 5));
- console.log(rgb(13, 35, 456));
- function apartmentSearch(numberOfFloors, numberOfApartmentsOnFloor, apartmentNumber) {
- let apartmentLocation = {
- entrance: null,
- floor: null,
- }
- apartmentLocation.entrance = Math.ceil(apartmentNumber / (numberOfFloors * numberOfApartmentsOnFloor));
- apartmentLocation.floor = Math.ceil(apartmentNumber % (numberOfFloors * numberOfApartmentsOnFloor) /
- numberOfApartmentsOnFloor) || numberOfFloors;
- return apartmentLocation;
- }
- console.log(apartmentSearch(9, 4, 81));
- function capitalize(str) {
- let result = str.trim().slice(0, 1).toUpperCase() + str.trim().slice(1).toLowerCase();
- return result;
- }
- function credentials() {
- let person = {}
- person.name = capitalize(prompt('What is your name?'));
- person.surname = capitalize(prompt('What is your surname?'));
- person.fatherName = capitalize(prompt('What is your middle name?'));
- person.fullName = person.surname + ' ' + person.name + ' ' + person.fatherName;
- return person;
- }
- credentials();
- function newLine(str) {
- let result = str.split('\\n').join('\n');
- return result;
- }
- alert(newLine(prompt("Enter the string. As a newline marker use '\\n'")));
- function promptOr(str, defaultValue) {
- prompt(str) || defaultValue;
- }
- alert(promptOr('Enter something', 'error'));
- }
- // createPerson
- // Создайте функцию createPerson, которая принимает два параметра: name и surname, и возвращает объект с
- // ключами name, surname, getFullName. getFullName должна быть функцией, которая работает с объектом через this,
- // а так же готова к тому, что в объекте в последствии добавить ключ fatherName
- create_person: {
- function createPerson(name, surname) {
- let obj = {
- name,
- surname,
- getFullName() {
- let fullName = this.fatherName ? this.name + ' ' + this.fatherName + ' ' + this.surname
- : this.name + ' ' + this.surname;
- return fullName;
- },
- }
- return obj;
- }
- const a = createPerson("Вася", "Пупкин")
- const b = createPerson("Анна", "Иванова")
- const c = createPerson("Елизавета", "Петрова")
- a.fatherName = 'Иванович' //Вася Иванович Пупкин
- console.log(a.getFullName()) //Вася Пупкин
- console.log(b.getFullName()) //Анна Иванова
- }
- // createPersonClosure
- // Задание в целом, аналогично предыдущему, однако, в объект заносить name, surname, fatherName и age не нужно.
- // name и surname должны быть параметрами, переменные age и fatherName объявите через let в теле
- // createPersonClosure. Внутри createPersonClosure объявите следующие функции:
- // getName
- // getSurname
- // getFatherName
- // getAge
- // getFullName
- // Эти функции должны возвращать переменные, объявленные в функции createPersonClosure
- // Следующие функции:
- // setName
- // setSurname
- // setFatherName
- // setAge
- // setFullName
- // должны принимать один параметр (newName, newSurname и т.п.), проверять его на корректность и менять значение
- // переменных, объявленных внутри createPersonClosure.Проверки на корректность:
- // имя, фамилия, отчество должно быть строкой с большой буквы
- // возраст должен быть числом от 0 до 100.
- // Если проверка на корректность не пройдена, функция не должна менять соответстующую переменную.
- // Функция setFullName должна разбивать строку по пробелам и заносить части строки в surname, name и fatherName
- // Все функции set должны возвращать то значение, которое по итогу попало во внутренюю переменную. То есть если
- // новое значение некорректно, то функция возвращает старое значение
- // В объекте-результате createPersonClosure должны быть только эти 10 функций (геттеров и сеттеров). В коде
- // функций this не используется
- create_person_closure: {
- function createPersonClosure(name, surname) {
- let age;
- let fatherName;
- let obj = {
- getName() {
- return name;
- },
- getSurname() {
- return surname;
- },
- getFatherName() {
- return fatherName;
- },
- getAge() {
- return age;
- },
- getFullName() {
- return surname + ' ' + name + ' ' + fatherName;
- },
- setName(newName) {
- if (validateName(newName)) {
- name = newName;
- } else {
- alert('ERROR. You need write string with big first letter');
- }
- },
- setSurname(newSurname) {
- if (validateName(newSurname)) {
- surname = newSurname;
- } else {
- alert('ERROR. You need write string with big first letter');
- }
- },
- setFatherName(newFatherName) {
- if (validateName(newFatherName)) {
- fatherName = newFatherName;
- } else {
- alert('ERROR. You need write string with big first letter');
- }
- },
- setFullName(str) {
- surname = str.split(' ')[0];
- name = str.split(' ')[1];
- fatherName = str.split(' ')[2];
- },
- setAge(newAge) {
- if (newAge >= 0 && newAge <= 100 || newAge == '') {
- age = newAge;
- } else {
- alert('ERROR');
- }
- },
- }
- function validateName(name) {
- return name.charCodeAt(0) >= 65 && name.charCodeAt(0) <= 90 ||
- name.charCodeAt(0) >= 1040 && name.charCodeAt(0) <= 1071 || name == '';
- }
- return obj;
- }
- const a = createPersonClosure("Вася", "Пупкин");
- const b = createPersonClosure("Анна", "Иванова");
- console.log(a.getName());
- console.log(a.setAge(15));
- //a.setAge(150); //не работает
- a.setSurname('Варченко');
- a.setFatherName('Александрович');
- console.log(a.getSurname());
- console.log(a.getFullName());
- b.setFullName("Петрова Анна Николаевна");
- console.log(b.getFatherName()); //Николаевна
- }
- // createPersonClosureDestruct
- // Сделайте набор параметров функции из предыдущего задания объектом, используйте деструктуризацию для
- // извлечения параметров.
- // Задайте значения по умолчанию
- create_person_closure_destruct: {
- function createPersonClosureDestruct(object) {
- let { name = '', surname = '', fatherName = '', age = 0 } = object;
- let obj = {
- getName() {
- return name;
- },
- getSurname() {
- return surname;
- },
- getFatherName() {
- return fatherName;
- },
- getAge() {
- return age;
- },
- getFullName() {
- return surname + ' ' + name + ' ' + fatherName;
- },
- setName(newName) {
- if (validateName(newName)) {
- name = newName;
- } else {
- alert('ERROR. You need write string with big first letter');
- }
- },
- setSurname(newSurname) {
- if (validateName(newSurname)) {
- surname = newSurname;
- } else {
- alert('ERROR. You need write string with big first letter');
- }
- },
- setFatherName(newFatherName) {
- if (validateName(newFatherName)) {
- fatherName = newFatherName;
- } else {
- alert('ERROR. You need write string with big first letter');
- }
- },
- setFullName(str) {
- surname = str.split(' ')[0];
- name = str.split(' ')[1];
- fatherName = str.split(' ')[2];
- },
- setAge(newAge) {
- if (newAge >= 0 && newAge <= 100 || newAge == '') {
- age = newAge;
- } else {
- alert('ERROR');
- }
- },
- }
- function validateName(name) {
- return name.charCodeAt(0) >= 65 && name.charCodeAt(0) <= 90 ||
- name.charCodeAt(0) >= 1040 && name.charCodeAt(0) <= 1071 || name == '';
- }
- return obj;
- }
- function createPerson(name, surname) {
- let obj = {
- name,
- surname,
- getFullName() {
- let fullName = this.fatherName ? this.name + ' ' + this.fatherName + ' ' + this.surname
- : this.name + ' ' + this.surname;
- return fullName;
- },
- }
- return obj;
- }
- const a = createPersonClosureDestruct(createPerson("Вася Пупкин")); // в самом задании выше нам было сказано записать в createPerson 2 параметра, тут же передается строка. Соответсвенно нужно либо переписать функцию createPerson, чтобы она разбивала строку, либо передавать через запятую имя и фамилию
- const b = createPersonClosureDestruct({ name: 'Николай', age: 75 });
- console.log(a.getName());
- console.log(a.getAge());
- console.log(b.getSurname());
- }
- // isSorted
- // Напишите функцию isSorted, которая принимает набор параметров любого размера, и возвращает true, когда все
- // параметры - это числа, и каждое из них больше предыдущего параметра.
- is_sorted: {
- function isSorted(...params) {
- let result = true;
- for (let i = 0; i < params.length; i++) {
- if (typeof params[i] != 'number' || params[i] > params[i + 1] && params[i + 1] != undefined) {
- result = false;
- }
- }
- return result;
- }
- console.log(isSorted(1, 0, 3, 56, 234, 56, 2, 8, 76));
- console.log(isSorted(1, 2, 3, 5));
- console.log(isSorted(1, 'jrfnejrkfn', 3, 4, 5));
- console.log(isSorted(1));
- }
- // Test isSorted
- // Используя циклический ввод в массив (задание array fill), обеспечьте ввод данных для isSorted
- test_is_sorted: {
- let arr = [];
- let answer;
- while (answer = prompt('Enter something')) {
- arr.push(+answer);
- }
- function isSorted(arr) {
- console.log(arr);
- let result = true;
- for (let i = 0; i < arr.length; i++) {
- if (typeof arr[i] != 'number' || arr[i] > arr[i + 1] && arr[i + 1] != undefined) {
- result = false;
- }
- }
- return result;
- }
- console.log(isSorted(arr));
- }
- // personForm
- // Напишите функцию, которая принимает два параметра: родительский DOM-элемент и объект-результат работы
- // createPersonClosure (или createPersonClosureDestruct, результаты у обоих этих функций одинаковые) и рисует
- // форму, которая позволяет редактировать данные о персоне.
- // В начале работы personForm создает 5 полей ввода (имя, фамилия, отчество, возраст, ФИО) в родительском
- // DOM-элементе и устанавливает туда значения, прочитанные с помощью getName, getSurname и т.д.
- // По событию oninput в любом из полей ввода нужно запускать соответствующий set..... Например при изменении
- // поля ввода имени должен запускаться setName(какой-то инпут.value). Функции set... возвращают значение, и
- // его нужно занести обратно в input. Таким образом в полях ввода невозможно будет ввести некорректные значения
- // (например возраст не сможет выйти за пределы 0-100 лет)
- person_form: {
- function createPersonClosure(name, surname) {
- let age;
- let fatherName;
- let obj = {
- getName() {
- return name;
- },
- getSurname() {
- return surname;
- },
- getFatherName() {
- return fatherName;
- },
- getAge() {
- return age;
- },
- getFullName() {
- return surname + ' ' + name + ' ' + fatherName;
- },
- setName(newName) {
- if (validateName(newName)) {
- name = newName;
- } else {
- alert('ERROR. You need write string with big first letter');
- }
- return name;
- },
- setSurname(newSurname) {
- if (validateName(newSurname)) {
- surname = newSurname;
- } else {
- alert('ERROR. You need write string with big first letter');
- }
- return surname;
- },
- setFatherName(newFatherName) {
- if (validateName(newFatherName)) {
- fatherName = newFatherName;
- } else {
- alert('ERROR. You need write string with big first letter');
- }
- return fatherName;
- },
- setFullName(str) {
- let fullNameArray = str.split(' ');
- while (fullNameArray.length < 3) {
- fullNameArray.push(null);
- }
- surname = this.setSurname(fullNameArray[0]);
- name = this.setName(fullNameArray[1]);
- fatherName = this.setFatherName(fullNameArray[2]);
- return fullNameArray.filter(item => item !== null).join(' ');
- },
- setAge(newAge) {
- if (newAge >= 0 && newAge <= 100 || newAge == '') {
- age = newAge;
- } else {
- alert('ERROR');
- }
- return age;
- },
- }
- function validateName(name) {
- return name == null || name.charCodeAt(0) >= 65 && name.charCodeAt(0) <= 90 ||
- name.charCodeAt(0) >= 1040 && name.charCodeAt(0) <= 1071 || name == '';
- }
- return obj;
- }
- const b = createPersonClosure("Анна", "Иванова");
- b.setAge(15);
- b.setFullName("Петрова Анна Николаевна");
- function createForm(domElement, person) {
- let name = document.createElement('input');
- name.value = person.getName();
- domElement.append(name);
- let surname = document.createElement('input');
- surname.value = person.getSurname();
- domElement.append(surname);
- let fatherName = document.createElement('input');
- fatherName.value = person.getFatherName();
- domElement.append(fatherName);
- let age = document.createElement('input');
- age.value = person.getAge();
- domElement.append(age);
- let fullName = document.createElement('input');
- fullName.value = person.getFullName();
- domElement.append(fullName);
- name.oninput = () => {
- name.value = person.setName(name.value);
- }
- surname.oninput = () => {
- surname.value = person.setSurname(surname.value);
- }
- fatherName.oninput = () => {
- fatherName.value = person.setFatherName(fatherName.value);
- }
- age.oninput = () => {
- age.value = person.setAge(age.value);
- }
- fullName.oninput = () => {
- fullName.value = person.setFullName(fullName.value);
- surname.value = fullName.value.split(' ')[0] || '';
- name.value = fullName.value.split(' ')[1] || '';
- fatherName.value = fullName.value.split(' ')[2] || '';
- }
- }
- createForm(document.body, b);
- }
- get_set_form: {
- function createPersonClosure(name, surname) {
- let age;
- let fatherName;
- let obj = {
- getName() {
- return name;
- },
- getSurname() {
- return surname;
- },
- getFatherName() {
- return fatherName;
- },
- getAge() {
- return age;
- },
- getFullName() {
- return surname + ' ' + name + (fatherName ? ' ' + fatherName : '');
- },
- setName(newName) {
- if (validateName(newName)) {
- name = newName;
- } else {
- alert('ERROR. You need write string with big first letter');
- }
- return name;
- },
- setSurname(newSurname) {
- if (validateName(newSurname)) {
- surname = newSurname;
- } else {
- alert('ERROR. You need write string with big first letter');
- }
- return surname;
- },
- setFatherName(newFatherName) {
- if (validateName(newFatherName)) {
- fatherName = newFatherName;
- } else {
- alert('ERROR. You need write string with big first letter');
- }
- return fatherName;
- },
- setFullName(str) {
- let fullNameArray = str.split(' ');
- while (fullNameArray.length < 3) {
- fullNameArray.push(null);
- }
- surname = this.setSurname(fullNameArray[0]);
- name = this.setName(fullNameArray[1]);
- fatherName = this.setFatherName(fullNameArray[2]);
- return fullNameArray.filter(item => item !== null).join(' ');
- },
- setAge(newAge) {
- if (newAge >= 0 && newAge <= 100 || newAge == '') {
- age = newAge;
- } else {
- alert('ERROR');
- }
- return age;
- },
- }
- function validateName(name) {
- return name == null || name.charCodeAt(0) >= 65 && name.charCodeAt(0) <= 90 ||
- name.charCodeAt(0) >= 1040 && name.charCodeAt(0) <= 1071 || name == '';
- }
- return obj;
- }
- let car;
- {
- let brand = 'BMW', model = 'X5', volume = 2.4
- car = {
- getBrand() {
- return brand
- },
- setBrand(newBrand) {
- if (newBrand && typeof newBrand === 'string') {
- brand = newBrand
- }
- return brand
- },
- getModel() {
- return model
- },
- setModel(newModel) {
- if (newModel && typeof newModel === 'string') {
- model = newModel
- }
- return model
- },
- getVolume() {
- return volume
- },
- setVolume(newVolume) {
- if (newVolume && typeof newVolume === 'number' && newVolume > 0 && newVolume < 20) {
- volume = newVolume
- }
- return volume
- },
- getTax() {
- return volume * 100
- }
- }
- }
- function getSetForm(parent, getSet) {
- const inputs = {}; //реестр
- const updateInputs = () => {
- for (const fieldName in inputs) {
- const getKey = `get` + fieldName;
- if (getKey in getSet) {
- inputs[fieldName].value = getSet[getKey]() || '';
- }
- }
- };
- for (const getSetName in getSet) {
- const getOrSet = getSetName.slice(0, 3);
- const fieldName = getSetName.slice(3);//остальные буквы getSetName - типа "Name" или "FullName"
- const setKey = `set` + fieldName;
- const getKey = `get` + fieldName;
- if (!(fieldName in inputs)) {
- inputs[fieldName] = document.createElement('input');
- parent.append(inputs[fieldName]);
- if (!(setKey in getSet)) {
- inputs[fieldName].disabled = true;
- }
- inputs[fieldName].type = typeof getSet[getKey]();
- inputs[fieldName].placeholder = fieldName;
- inputs[fieldName].oninput = () => {
- inputs[fieldName].value = getSet[setKey](inputs[fieldName].value);
- updateInputs();
- };
- }
- }
- updateInputs();
- }
- getSetForm(document.body, car);
- getSetForm(document.body, createPersonClosure('Анон', "Анонов"));
- }
|