Browse Source

Загрузить файлы 'JS 5 Online Homework/Homework #11: functions'

stas.vladlenko 1 year ago
parent
commit
737431bf81

+ 302 - 0
JS 5 Online Homework/Homework #11: functions/hw#11.js

@@ -0,0 +1,302 @@
+// createPerson =============================================================================
+
+
+function createPerson(name,surname){
+    return{
+        name: name,
+        surname: surname,
+        getFullName: function(){ return `${this.surname} ${this.name} ${this.fatherName ? this.fatherName : ''}` }
+    }
+}
+
+const a = createPerson("Вася", "Пупкин")
+const b = createPerson("Анна", "Иванова")
+const c = createPerson("Елизавета", "Петрова")
+
+console.log(a.getFullName())
+a.fatherName = 'Иванович'
+console.log(b.getFullName())
+
+
+// createPersonClosure =============================================================================
+
+
+function createPersonClosure(name,surname){
+    let age
+    let fatherName
+    const fullName = `${surname} ${name} ${fatherName}`
+    const checkData = (data) => {
+        if(typeof data === 'string' && data.charAt(0) == data.charAt(0).toUpperCase() ){
+            return data
+        }
+        if(typeof data === 'number' && data >=1 && data <=100){
+            return data
+        }
+    }
+    return {
+        getName: () => {return name},
+        getSurname: () => {return surname},
+        getFatherName: () => {return fatherName},
+        getFullName: () => {return fullName},
+        getAge: () => {return age},
+    
+        setName: (newName) => {checkData(newName) ? name = newName : newName},
+        setSurname: (newSurname) => {checkData(newSurname) ? surname = newSurname : newSurname},
+        setFatherName: (newFatherName) => {checkData(newFatherName) ? fatherName = newFatherName : newFatherName},
+        setFullName: (newFullName) => {
+            checkData(newFullName.split(' ')[0]) ? surname = newFullName.split(' ')[0]  : newFullName
+            checkData(newFullName.split(' ')[1]) ? name = newFullName.split(' ')[1]  : newFullName
+            checkData(newFullName.split(' ')[2]) ? fatherName = newFullName.split(' ')[2]  : newFullName
+        },
+        setAge: (newAge) => {checkData(newAge) ? age = newAge : newAge},
+    }
+}
+
+const a = createPersonClosure("Вася", "Пупкин")
+const b = createPersonClosure("Анна", "Иванова")
+console.log(a.getName())
+a.setAge(15)
+console.log(a.getAge())
+a.setAge(150)
+console.log(a.getAge())
+
+b.setFullName("Петрова Анна Николаевна")
+console.log(b.getFatherName())
+
+
+// createPersonClosureDestruct =============================================================================
+
+
+function createPerson(person){
+    return{
+        name: person.split(' ')[0],
+        surname: person.split(' ')[1],
+        fatherName: person.split(' ')[2]
+    }
+}
+
+function createPersonClosureDestruct(person){
+
+    let {surname = 'Фамилия не задана', name = 'Имя не задано', fatherName = 'Отчество не задано', fullName, age = 'Возраст не задан'} = person
+    const checkData = (data) => {
+        if(typeof data === 'string' && data.charAt(0) == data.charAt(0).toUpperCase() ){
+            return data
+        }
+        if(typeof data === 'number' && data >=1 && data <=100){
+            return data
+        }
+    }
+    return {
+        getName: () => {return checkData(name)},
+        getSurname: () => {return checkData(surname)},
+        getFatherName: () => {return checkData(fatherName)},
+        getFullName: () => {return fullName = `${surname} ${name} ${fatherName}`},
+        getAge: () => {return checkData(age)},
+    
+        setName: (newName) => {checkData(newName) ? name = newName : newName},
+        setSurname: (newSurname) => {checkData(newSurname) ? surname = newSurname : newSurname},
+        setFatherName: (newFatherName) => {checkData(newFatherName) ? fatherName = newFatherName : newFatherName},
+        setFullName: (newFullName) => {
+            checkData(newFullName.split(' ')[0]) ? surname = newFullName.split(' ')[0]  : newFullName
+            checkData(newFullName.split(' ')[1]) ? name = newFullName.split(' ')[1]  : newFullName
+            checkData(newFullName.split(' ')[2]) ? fatherName = newFullName.split(' ')[2]  : newFullName
+        },
+        setAge: (newAge) => {checkData(newAge) ? age = newAge : newAge},
+    }
+}
+
+const a = createPersonClosureDestruct(createPerson("Вася Пупкин"))
+const b = createPersonClosureDestruct({name: 'Николай', age: 75})
+
+
+// isSorted =============================================================================
+
+
+function isSorted (...arg){
+
+    for (let i = 0; i < arg.length - 1; i ++){
+        if( (arg[i] > arg[i+1]) || typeof arg[i] !== 'number' ){
+            return false
+        }
+    }
+    return true
+}
+
+const a = isSorted(1,2,3,4,5,6,7)
+console.log(a)
+const b = isSorted(1,2,3,4,-5,6,7)
+console.log(b)
+const c = isSorted(1,2,3,'str',5,6,7)
+console.log(c)
+
+
+// Test isSorted =============================================================================
+
+
+function isSorted (...arg){
+    let argNum
+
+    while (argNum !== null){
+        argNum = prompt('Введите числа, которые хотите добавить в массив')
+        if(argNum){
+            arg.push(argNum)
+        }
+    }
+
+    for (let i = 0; i < arg.length - 1; i ++){
+        if( (arg[i] > arg[i+1]) || typeof arg[i] === 'number' ){
+            return false
+        }
+    }
+    return true
+}
+
+isSorted()
+
+
+// personForm =============================================================================
+
+
+function createPerson(person){
+    return{
+        name: person.split(' ')[0],
+        surname: person.split(' ')[1],
+        fatherName: person.split(' ')[2]
+    }
+}
+
+function createPersonClosureDestruct(person){
+
+    let {surname = 'Фамилия не задана', name = 'Имя не задано', fatherName = 'Отчество не задано', fullName, age = 'Возраст не задан'} = person
+    const checkData = (data) => {
+        if(typeof data === 'string' && data.charAt(0) == data.charAt(0).toUpperCase()){
+            return data
+        }
+        if(typeof data === 'number' && data >=1 && data <=100){
+            return data
+        }
+    }
+    return {
+        getName: () => {return checkData(name)},
+        getSurname: () => {return checkData(surname)},
+        getFatherName: () => {return checkData(fatherName)},
+        getFullName: () => {return fullName = `${surname} ${name} ${fatherName}`},
+        getAge: () => {return age},
+    
+        setName: (newName) => {checkData(newName) ? name = newName : name},
+        setSurname: (newSurname) => {checkData(newSurname) ? surname = newSurname : newSurname},
+        setFatherName: (newFatherName) => {checkData(newFatherName) ? fatherName = newFatherName : newFatherName},
+        setFullName: (newFullName) => {
+            checkData(newFullName.split(' ')[0]) ? surname = newFullName.split(' ')[0]  : newFullName
+            checkData(newFullName.split(' ')[1]) ? name = newFullName.split(' ')[1]  : newFullName
+            checkData(newFullName.split(' ')[2]) ? fatherName = newFullName.split(' ')[2]  : newFullName
+        },
+        setAge: (newAge) => {checkData(newAge) ? age = newAge : newAge},
+    }
+}
+
+const b = createPersonClosureDestruct("Анна", "Иванова")
+b.setAge(15)
+b.setFullName("Петрова Анна Николаевна")
+
+
+function personForm( parent, person ){
+
+    const form = document.createElement('form')
+    parent.append(form)
+    Object.assign(form.style, {display: 'flex', flexDirection: 'column', width: '300px', backgroundColor: '#a2cac9'})
+
+    const inputName = document.createElement('input')
+    form.appendChild(inputName)
+    Object.assign(inputName.style, {margin: '10px'})
+    inputName.placeholder = 'Name'
+    inputName.value = person.getName()
+    inputName.oninput = () => {person.setName(inputName.value)}
+
+    const inputSurname = document.createElement('input')
+    form.appendChild(inputSurname)
+    Object.assign(inputSurname.style, {margin: '10px'})
+    inputSurname.placeholder = 'Surname'
+    inputSurname.value = person.getSurname()
+    inputSurname.oninput = () => person.setSurname(inputSurname.value)
+
+    const inputFatherName = document.createElement('input')
+    form.appendChild(inputFatherName)
+    Object.assign(inputFatherName.style, {margin: '10px'})
+    inputFatherName.placeholder = 'Fathername'
+    inputFatherName.value = person.getFatherName()
+    inputFatherName.oninput = () => person.setFatherName(inputFatherName.value)
+
+    const inputAge = document.createElement('input')
+    form.appendChild(inputAge)
+    Object.assign(inputAge.style, {margin: '10px'})
+    inputAge.placeholder = 'Age'
+    inputAge.value = person.getAge()
+    inputAge.oninput = () => {person.setAge(+inputAge.value)}
+
+    const inputFullName = document.createElement('input')
+    form.appendChild(inputFullName)
+    Object.assign(inputFullName.style, {margin: '10px'})
+    inputFullName.placeholder = 'Full Name'
+    inputFullName.value = person.getFullName()
+    inputFullName.oninput = () => person.setFullName(inputFullName.value)
+}
+
+const f = personForm(document.body, b)
+
+
+// getSetForm =============================================================================
+
+
+function getSetForm(parent, obj) {
+    const registry = {}
+    const objForm = document.createElement('form')
+    parent.append(objForm)
+    Object.assign(objForm.style, {display: 'flex', flexDirection: 'column', width: '300px', backgroundColor: '#a2cac9'})
+
+    const updateInputs = () => {
+
+        for (const registryKey in registry) {
+
+            const keyToMethod = `get${registryKey}`
+            if(obj[keyToMethod]){
+                registry[registryKey].value = obj[keyToMethod]()
+
+            } 
+
+        }
+    }
+
+    for (const objKey in obj) {
+
+        const getOrSet = objKey.slice(0, 3)
+        const objValue = objKey.slice(3, objKey.length)
+        const getValue = `get${objValue}`
+        const setValue = `set${objValue}`
+        
+        if (registry[objValue] === undefined) registry[objValue] = document.createElement('input')
+        if (!obj[setValue]) registry[objValue].disabled = true
+
+        objForm.appendChild(registry[objValue])
+        Object.assign(registry[objValue].style, {margin: '10px'})
+
+        registry[objValue].type = typeof obj[getValue]()
+        registry[objValue].placeholder = `${objValue}`
+        registry[objValue].oninput = () => registry[objValue].type == 'number' ? obj[setValue](+registry[objValue].value) : obj[setValue](registry[objValue].value)
+        registry[objValue].onchange = () => updateInputs()
+
+    }
+    console.log(updateInputs())
+}
+
+
+
+
+
+
+
+
+
+
+
+

+ 12 - 0
JS 5 Online Homework/Homework #11: functions/index.html

@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+</head>
+<body>
+    <script src="main2.js"></script>
+</body>
+</html>