# Модуль

Проходной бал - 4

## objectValues

**1 балл**


Сделать функцию, которая будет вычитывать все значения из объекта и возвращать массив с этими значениями

```javascript
var notebook = {
    brand: "HP",
    type:  "440 G4",
    model: "Y7Z75EA",
    ram: 4,
    size: "14",
    weight: 1.8,
    resolution: {
        width: 1920,
        height: 1080
    },
};

objectValues(notebook) //возвращает ["HP", "440 G4", "Y7Z75EA", 4, "14", 1.8, { width: 1920, height: 1080 } ]
```

## objectCombine
**1 балл**

Сделать функцию, которая из двух массивов ключей и значений создает ассоциативный массив или `null` если массивы разной длины:

```javascript

objectCombine(['name', 'surname'], ['Donald', 'Trump']) // { name: "Donald", surname: "Trump" }
objectCombine(['name', 'surname'], ['Ivan', 'Petrovich', 'Cherezzabornoguzadirischenko']) // null

```

## choiceBuilder
**2 балла**

Напилите функцию, которая создает поле выбора `select` или набор `radio` в определенном контейнере:

```javascript
choiceBuilder('someId', {default: 'Не указан', male: "Мужской", female: 'Женский'})
```

если someId - это тэг `SELECT`, то добавляет в него `option` из объекта. Иначе создает radio кнопки

## tableEditor
**3 балла**

Создайте функцию, которая строит таблицу из массива массивов и позволяет редактировать любую ячейку по даблклику.
При даблклике контент ячейки подменяется на `input`. По даблклику по `input` измененые данные заносятся в оригинальный
массив и `input` удаляется из ячейки, заменяясь измененным значением.


```javascript
var arr = [[1,2],[3,4]]
tableEditor('someId', arr) //создает таблицу 2x2, каждую ячейку которой можно подредактировать. Изменения должны вноситься в arr
```

## formBuilder

**4 балла**

Накривотивьте функцию, которая из объекта сделает форму в контейнере `someId`

```javascript
formBuilder('someId', {
    login: {type: 'text',
            placeholder: 'Логин',
            validator: function(element){
                return element.value.length > 2;
            }},
    email: {type: 'email',
            placeholder: 'Мыло',
            validator: function(element){
                return element.value.indexOf('@') > -1;
            }},
    password1 : {type: 'password',
            placeholder: 'Пароль',
            validator: function(element, obj){
                return element.value == obj.password2;
            }},
    password2 : {type: 'password',
            placeholder: 'Пароль еще раз',
            validator: function(element, obj){
                return element.value == obj.password1;
            }},
    }, function(result){
        console.log(result)
        alert('спасибо за заполнение');
    })
```

Функция должна создавать поля ввода с `placeholder`, и кнопку сохранения. По кнопке функция должна проверять все валидаторы, и подсвечивать ошибочное поле красным фоном.  В валидаторы передается текущий элемент и объект с текущими значениями полей.
Когда валидация успешна, функция должна вызвать третий параметр - функцию-callback и передать в неё объект с результатом