# Домашнее задание. Функции 2, jQ

## sort

Сделайте обобщенную функцию сортировки массива

```javascript
var persons = [
    {name: "Иван", age: 17},
    {name: "Мария", age: 35},
    {name: "Алексей", age: 73},
    {name: "Яков", age: 12},
]

sort(persons, "age"); //сортирует по возрасту по возрастанию
sort(persons, "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 filter

Напишите свою реализацию `Array.filter` для **объектов**:

```javascript
var phone = {
    brand: "meizu",
    model: "m2",
    ram: 2,
    color: "black",
};

filter(phone,function(key,value){
    return (key == "color" || value == 2);
});
```

должно вернуть 
```javascript
{
    ram: 2,
    color: "black",
}
```

Для удаления пары ключ-значение используйте `delete`.

## 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>`.

## jqDocumentReady

Перенесите код предыдущих заданий в `$(document).ready`, измените место подключения **JS** кода в **HTML** (в `<head>`).

## Черный пояс

Расширьте **ManyPhones** возможностью удалять любое поле ввода телефона с помощью `<button class='delPhone'>x</button>`. Такая кнопка должна быть
возле каждого поля ввода.