From b94c5cb5b25e7cc5b30219f4306fddbf503ab98b Mon Sep 17 00:00:00 2001 From: maksim Date: Fri, 29 Jun 2018 16:31:26 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=B4=D0=BE=D0=BC=D0=B0=D1=88=D0=BD=D0=B5?= =?UTF-8?q?=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=BC=D0=B5=D1=80=209?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js-core/homeworks/homework-9/index.html | 11 ++ js-core/homeworks/homework-9/src/main.js | 176 +++++++++++++++++++++++ 2 files changed, 187 insertions(+) create mode 100644 js-core/homeworks/homework-9/index.html create mode 100644 js-core/homeworks/homework-9/src/main.js 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..475c73b --- /dev/null +++ b/js-core/homeworks/homework-9/src/main.js @@ -0,0 +1,176 @@ + +// Отобразите достаточно ли у 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; + }else{ + return arrVal.technology === 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(`В коде есть еще вариант, но он не использует замыкания. +Текущий вариант тоже не самый лучший, потому что придумал замкнуть только на глобальный скоуп.`) From dbdfa5446c5ab0de36445a6510d3acc87e8f2ebe Mon Sep 17 00:00:00 2001 From: Maaxym Date: Sat, 21 Jul 2018 20:12:47 +0300 Subject: [PATCH 2/2] return in else statement --- js-core/homeworks/homework-9/src/main.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/js-core/homeworks/homework-9/src/main.js b/js-core/homeworks/homework-9/src/main.js index 475c73b..2e21b8a 100644 --- a/js-core/homeworks/homework-9/src/main.js +++ b/js-core/homeworks/homework-9/src/main.js @@ -26,8 +26,6 @@ function goodDev() { return (obj.skills || obj.experience).some(function(arrVal){ if(typeof arrVal=== 'string'){ return arrVal === val; - }else{ - return arrVal.technology === val; } });