Ivan Asmer 8 lat temu
rodzic
commit
e05c201b1c
2 zmienionych plików z 102 dodań i 2 usunięć
  1. 17 2
      05Functions.md
  2. 85 0
      06FunctionJQHomeWork.md

+ 17 - 2
05Functions.md

@@ -552,15 +552,28 @@ function intPrompt(message, defaultValue)
 {
     do {
         var value = prompt(message, defaultValue);
-    } while(isNaN(+value) || !Number.isInteger(+value) && value !== null);
+    } while(value !== null && isNaN(+value) || !Number.isInteger(+value));
     return value;
 }
 
+function gamePrompt(message, defaultValue
+
+    do 
+        var value = prompt(message, defaultValue)
+    } while(value !== null && !(value == 'камень' || value == 'ножницы' || value == 'бумага'))
+    return value
+}
+
+```
+Далее идет **общее** решение ввода с валидацией:
+
+```javascript
+
 function validatedPrompt(message, defaultValue, validator)
 {
     do {
         var value = prompt(message, defaultValue);
-    } while(!validator(value) && value !== null);
+    } while( value !== null && !validator(value));
     return value;
 }
 debugger;
@@ -573,6 +586,8 @@ alert(validatedPrompt("камень-нжнцы-бмг", "", function(value) {
 }))
 ```
 
+В этом примере код валидации выделен в функцию обратного вызова, а общее решение циклического ввода находится в функции `validatedPrompt`
+
 ## Для чего используются функции.
 
 - Для избавления повторяющихся кусков кода. **DRY**

+ 85 - 0
06FunctionJQHomeWork.md

@@ -0,0 +1,85 @@
+# Домашнее задание. Функции 2, jQ
+
+## sort
+
+Сделайте обобщенную функцию сортировки массива
+
+```javascript
+var persons = [
+    {name: "Иван", age: 17},
+    {name: "Мария", age: 35},
+    {name: "Алексей", age: 73},
+    {name: "Яков", age: 12},
+]
+
+sort("age"); //сортирует по возрасту по возрастанию
+sort("name", false); //сортирует по имени по убыванию
+```
+
+Функция позволяет отсортировать *любой набор* данных по имени поля (первый параметр). Вторым параметром идет необязательный `Boolean`, который в случае `true` делает сортировку по возрастанию, в случае `false` - по убыванию.
+
+## array map 
+
+Используя Array.map приведите все строки в массиве к числу. Элементы других типов оставьте как есть:
+
+```javascript
+["1", {}, null, undefined, "500", 700]
+```
+
+должно превратиться в 
+
+```javascript
+[1, {}, null, undefined, 500, 700]
+```
+
+## array reduce
+
+Получите произведение всех чисел в массиве, используя `Array.reduce`. Не обрабатывайте типы данных, не являющиеся числом.
+
+```javascript
+["0", 5, 3, "string", null]
+```
+
+результат должен быть 15
+
+## object map
+
+Напишите свою реализацию `Array.map` для **объектов**:
+
+```javascript
+map({name: "Иван", age: 17},function(key,value){
+    var result = {};
+    result[key+"_"] = value + "_";
+    return result;
+}) //должен вернуть {name_: "Иван_", age_: "17_"}
+```
+
+## jqCalculator
+
+Сделать калькулятор на jQuery, который позволяет складывать, вычитать, умножать и делить числа. Операции должны быть отдельными кнопками, так же должно быть три поля ввода - для двух операндов и для результата.
+
+## jqUpperCase
+
+Сделайте поле ввода (`input type=text`) и кнопку `upperCase`, при нажатии на которую все буквы в поле ввода превратятся в большие
+
+## jqCAPSLOCK
+
+Сделайте поле ввода, которое сразу при вводе превращает все буквы в большие. Используйте события `keydown`, `keyup`, `keypress`, `change` или другие.
+
+## jqViewablePassword
+
+Сделайте поле ввода пароля с возможностью показать пароль используя поле типа `checkbox`. Наподобие полей ввода пароля WiFi. 
+
+## jqRadioCalculator
+
+Сделайте калькулятор, только вместо набора кнопок для сложения, вычитания, умножения и деления используйте `input type='radio'`
+
+## jqManyPhones
+
+Напишите код, который по нажатию кнопки `<button id='addPhone'>+</button>` добавляет поле ввода телефона. Количество таких полей ввода неограничено, все они
+должны находится в одном элементе `<div>`.
+
+## Черный пояс
+
+Расширьте **ManyPhones** возможностью удалять любое поле ввода телефона с помощью `<button class='delPhone'>x</button>`. Такая кнопка должна быть
+возле каждого поля ввода.