diff --git a/js-core/homeworks/homework-9/index.html b/js-core/homeworks/homework-9/index.html new file mode 100644 index 0000000..2581c19 --- /dev/null +++ b/js-core/homeworks/homework-9/index.html @@ -0,0 +1,11 @@ + + + + + Home work 9 + + + + + + \ No newline at end of file diff --git a/js-core/homeworks/homework-9/src/main.js b/js-core/homeworks/homework-9/src/main.js new file mode 100644 index 0000000..2e21b8a --- /dev/null +++ b/js-core/homeworks/homework-9/src/main.js @@ -0,0 +1,174 @@ + +// Отобразите достаточно ли у developers навыков ? +// Отобразите всех разработчиков и вызовете у каждого +// разработчика метод goodDev -- +/* + * Количество требований к разработчику совпадает с его навыками. + * Используйте в задаче this + * */ +let developer1 = { + skills: ['JavaScript', 'linux', 'html', 'OOP', 'Node.js'], + requirements: ['Node.js', 'JavaScript', 'OOP'], + goodDev: goodDev +}; +let developer2 = { + experience: [ + { technology: 'java' }, + { technology: 'c++' }, + { technology: 'aws' }, + { technology: 'docker' } + ], + requirements: ['java', 'json', 'c++', 'JavaScript'], + goodDev: goodDev +}; +function goodDev() { + let calcObj = (val,obj) => { + return (obj.skills || obj.experience).some(function(arrVal){ + if(typeof arrVal=== 'string'){ + return arrVal === val; + } + }); + + } + this.requirements.forEach( val => { + console.log( + `required: ${val} ... ` + + (calcObj(val,this) ? 'success' : 'fail') + ); + },this); +} +console.log('\ndeveloper1'); +developer1.goodDev(); +console.log('\ndeveloper2'); +developer2.goodDev(); +// developer 1 +// required: Node.js ... success +// required: JavaScript ... success +// required: OOP ... success +// --- +// developer 2 +// required: json ... fail +// required: JavaScript ... success +// required: Java ... success +// required: OOP ... success + + + + +/* + * + * TASK 2 + * + * + * Напишите функцию принимает 1 аргумент сортирует объект по + * переданному значению (например age или name) + * + * При вызове функции используйте this + * + * */ +let myObject = { + database: [ + { age: 100, name: 'b' }, + { age: 15, name: 'c' }, + { age: 25, name: 'a' } + ] +}; + + +myObject.myFilter = function(field) { + return this.database.sort((prev,next) => { + + if(parseInt(prev[field])){ + // console.log(parseInt(prev[field]) > parseInt(next[field]) ? 1 : -1 ); + return parseInt(prev[field]) > parseInt(next[field]) ? 1 : -1 ; + }else{ + return prev[field] > next[field] ? 1 : -1; + } + }); +}; +// {age:15, name:'c'}, {age:25, name:'a'} {age:100, name:'b'} + +// создаю копии массивов, потому что в консоли отображаются потом по последней сортировке, неудобно +console.log(myObject.myFilter('age').slice()); +// {age:25, name:a}, {age:100, name: b} ... +console.log(myObject.myFilter('name').slice()); + + +/* + * TASK 3 + * + * Перепишите homework 5 с использованием методов массивов и + * => arrow functions + * +*/ +////// @ TODO -- LVL Strong Junior +/* + * + * TASK 1 + * Напишите функцию которая принимает 3 аргумента:* + * + * - объект к которому привязывается метод + * - Имя свойства с которым связывается метод + * - Объявление привязываемого метода( функция ) + * + * Если количество аргументов у функции fn совпадает с переданными + * параметрами тогда сохраняет метод в замыкании + * и привязывает функцию к методу объекта + * + * при вызове одного и того же метода с разным количеством аргументов, + * должно давать различный результат + * + * */ +let junior = {}; +// fn.length == arguments.length + +/* + Вариант с замыканием. Минус - замыкание на глобальный скоуп. +*/ + +let arr = []; +function addMethod(object, name, fn) { + arr[fn.length] = fn; + object[name] = function(){ + arr[arguments.length](); + }; +} + + +/* + Вариант с сохранением в свойства самого объекта. +*/ +// function addMethod(object, name, fn) { +// if(!object.vars){ +// object.vars = []; +// } +// object.vars[fn.length] = fn; +// object[name] = function(){ +// this.vars[arguments.length](); +// }; +// } + + + + +addMethod(junior, 'ok', function() { + console.log('zero arguments'); +}); +addMethod(junior, 'ok', function(one) { + console.log('one arguments'); +}); +addMethod(junior, 'ok', function(one, two) { + console.log('two arguments'); +}); +addMethod(junior, 'ok', function(one, two, three) { + console.log('three arguments'); +}); +junior.ok(1, 2, 3); // 'three arguments' +junior.ok(1, 2); // 'two arguments' +junior.ok(1); //'one arguments' +junior.ok(); //'zero arguments' +junior.ok(1, 2, 3); // 'three arguments' + + +console.log(`В коде есть еще вариант, но он не использует замыкания. +Текущий вариант тоже не самый лучший, потому что придумал замкнуть только на глобальный скоуп.`)