From 9ff3ddc498fb9a04a141e3bd12d8eba718cf9ea1 Mon Sep 17 00:00:00 2001 From: Sergey Gogolev Date: 2016年10月11日 17:53:02 +0500 Subject: [PATCH 1/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 15 ++++++++++ .eslintrc.json | 3 ++ .gitignore | 3 ++ .npmrc | 2 ++ .travis.yml | 3 ++ README.md | 68 +++++++++++++++++++++++++++++++++++++++++++++- index.js | 44 ++++++++++++++++++++++++++++++ package.json | 13 +++++++++ phone-book.js | 62 ++++++++++++++++++++++++++++++++++++++++++ phone-book.spec.js | 61 +++++++++++++++++++++++++++++++++++++++++ 10 files changed, 273 insertions(+), 1 deletion(-) create mode 100644 .editorconfig create mode 100644 .eslintrc.json create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .travis.yml create mode 100644 index.js create mode 100644 package.json create mode 100644 phone-book.js create mode 100644 phone-book.spec.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..936d024 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_size = 4 +indent_style = space +trim_trailing_whitespace = true + +[*.json] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..db814bf --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "hrundel/node" +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0d48db5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea +/node_modules +*.log diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..f5357d5 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +save=true +save-exact=true diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..4909f83 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "6" diff --git a/README.md b/README.md index 07fbe88..133405a 100644 --- a/README.md +++ b/README.md @@ -1 +1,67 @@ -# javascript-task-2 \ No newline at end of file +# Задача «Телефонная книга» + +Перед выполнением задания внимательно прочитайте: + +- [О всех этапах проверки задания](https://github.com/urfu-2016/guides/blob/master/workflow/extra.md) +- [Как отправить пулл](https://github.com/urfu-2016/guides/blob/master/workflow/pull.md) +- [Как пройти тесты](https://github.com/urfu-2016/guides/blob/master/workflow/test.md) +- Правила оформления [javascript](https://github.com/urfu-2016/guides/blob/master/codestyle/js.md), [HTML](https://github.com/urfu-2016/guides/blob/master/codestyle/html.md) и [CSS](https://github.com/urfu-2016/guides/blob/master/codestyle/css.md) кода +- [Лекцию «Типы данных»](https://urfu-2016.github.io/javascript-slides/02-types/#/) + + +## Основное задание + +> Мы очень хотим, чтобы код вы написали сами, а не пользовались внешними библиотеками. + +Как известно, каждый уважающий себя разработчик должен в жизни сделать три вещи: +- [x] посадить DOM дерево +- [x] построить абстракцию +- [ ] ~~вырастить~~ написать телефонную книгу + +Предлагаем вам пройти легкий путь становления уважающего себя разработчика и реализовать для скрипта телефонной книги __phone-book.js__ ряд необходимых методов. + +Метод __add__ для добавления записей: +* На вход принимает «Телефон», «Имя» и «Электронную почту» +* Возвращает true или false в зависимости от успеха опереации +* Телефоны принимаются **только** в формате 5556667788 (без кода) + +Метод __update__ для обновления записей: +* На вход принимает «Телефон», «Имя» и «Электронную почту» +* Обновляет «Имя» и «Электронную почту» по заданному «Телефону» +* Возвращает true или false в зависимости от успеха опереации +* «Электронную почту» можно стереть (не передав последний параметр), а «Имя» – нет + +Метод __find__ для поиска записей: +* На вход принимает запрос в виде строки +* Ищет вхождение этой строки хотя бы в одно из полей «Телефон», «Имя» и «Электронную почту» +* Возвращает отсортированный по «Имени» массив строк в формате `name, phone, email` +* «Имя» и «Электронную почту» выводит как есть, а «Телефон» в формате `+7 (555) 666-77-88` +* Пустой запрос не должен ничего не находить +* Запрос «*» находит все записи + +Метод __findAndRemove__ для удаления записей: +* На вход принимает запрос в виде строки +* Находит (смотри __find__) и удаляет все найденные записи +* Возвращает число удаленных записей + +В файле _index.js_ вы можете найти примеры использования получившегося скриптика. + +## Дополнительное задание + +> Перед выполнением внимательно прочитайте [про особенности](https://github.com/urfu-2016/guides/blob/master/workflow/extra.md) + +По одной добавлять записи в книгу не очень удобно, поэтому будет здорово, если вы добавите в решение импорт данных из csv. Для этого реализуйте код метода __importFromCsv__. + +На вход метод принимает строку в формате csv. Если запись в телефонной книги уже есть – обновляет/дополняет её данными из csv строки. На выходе метод возвращает одно число добавленных/обновленных записей. + +Пример работы этого метода вы может отыскать в _index.js_ и в тестах. + +## Полезные ссылки + +- [Знакомимся с массивами](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array) +- [Пытаемся знакомиться с регулярными выражениями](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/RegExp) +- [Перебираем ключи объектов](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) +- [Метод indexOf для строк](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf) +- [Метод slice для строк](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/slice) + +Позвони мне, позвони diff --git a/index.js b/index.js new file mode 100644 index 0000000..9b259f5 --- /dev/null +++ b/index.js @@ -0,0 +1,44 @@ +'use strict'; + +var phoneBook = require('./phone-book'); + +// Эти записи добавятся, вернется true +phoneBook.add('5554440044', 'Григорий', 'grisha@example.com'); +phoneBook.add('5552220022', 'Борис', 'boris@example.com'); +phoneBook.add('5551110011', 'Алекс'); +phoneBook.add('5553330033', 'Валерий', 'valera@example.com'); + +// Эти запись не добавятся +phoneBook.add('3330033', 'Неизвестный', 'unknown@example.com'); +phoneBook.add('5551110011', 'Алексей'); +phoneBook.add('5555550055'); + +// Обновление +phoneBook.update('5551110011', 'Алексей', 'alex@example.com'); +phoneBook.update('5553330033', 'Валерий'); + +// В следующих примерах вернутся все записи +console.info(phoneBook.find('*')); +console.info(phoneBook.find('555')); +// Вывод будет следующий +// [ +// 'Алексей, +7 (555) 111-00-11, alex@example.com', +// 'Борис, +7 (555) 222-00-22, boris@example.com', +// 'Валерий, +7 (555) 333-00-33', +// 'Григорий, +7 (555) 444-00-44, grisha@example.com' +// ] + +// Удаление +phoneBook.findAndRemove('@'); // returns 3 + +if (phoneBook.isStar) { + // Импортируем из csv + var csv = [ + 'Борис;5552220022;boris@example.com', + 'Григорий;5554440044;grisha@example.com', + 'Алексей;5551110011;alex@example.com', + 'Валерий;5553330033;valera@example.com', + 'Неизвестный;3330033;unknown@example.com' + ].join('\n'); + phoneBook.importFromCsv(csv); // returns 4 +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1400772 --- /dev/null +++ b/package.json @@ -0,0 +1,13 @@ +{ + "private": true, + "main": "phone-book.js", + "scripts": { + "lint": "eslint .", + "test": "eslint . && mocha *.spec.js" + }, + "dependencies": { + "eslint": "3.7.0", + "eslint-config-hrundel": "latest", + "mocha": "3.1.0" + } +} diff --git a/phone-book.js b/phone-book.js new file mode 100644 index 0000000..69fb468 --- /dev/null +++ b/phone-book.js @@ -0,0 +1,62 @@ +'use strict'; + +/** + * Сделано задание на звездочку + * Реализован метод importFromCsv + */ +exports.isStar = true; + +/** + * Телефонная книга + */ +var phoneBook; + +/** + * Добавление записи в телефонную книгу + * @param {String} phone + * @param {String} name + * @param {String} email + */ +exports.add = function (phone, name, email) { + +}; + +/** + * Обновление записи в телефонной книге + * @param {String} phone + * @param {String} name + * @param {String} email + */ +exports.update = function (phone, name, email) { + +}; + +/** + * Удаление записей по запросу из телефонной книги + * @param {String} query + */ +exports.findAndRemove = function (query) { + +}; + +/** + * Поиск записей по запросу в телефонной книге + * @param {String} query + */ +exports.find = function (query) { + +}; + +/** + * Импорт записей из csv-формата + * @star + * @param {String} csv + * @returns {Number} – количество добавленных и обновленных записей + */ +exports.importFromCsv = function (csv) { + // Парсим csv + // Добавляем в телефонную книгу + // Либо обновляем, если запись с таким телефоном уже существует + + return csv.split('\n').length; +}; diff --git a/phone-book.spec.js b/phone-book.spec.js new file mode 100644 index 0000000..1b62a1a --- /dev/null +++ b/phone-book.spec.js @@ -0,0 +1,61 @@ +/* eslint-env mocha */ +'use strict'; + +var assert = require('assert'); + +var phoneBook = require('./phone-book'); + +describe('phone-book', function () { + it('должен добавлять записи', function () { + assert.ok(phoneBook.add('5554440044', 'Григорий', 'grisha@example.com')); + assert.ok(phoneBook.add('5552220022', 'Борис', 'boris@example.com')); + assert.ok(phoneBook.add('5551110011', 'Алекс')); + assert.ok(phoneBook.add('5553330033', 'Валерий', 'valera@example.com')); + }); + + it('не должен добавлять неправильные записи', function () { + assert.ok(!phoneBook.add('3330033', 'Неизвестный', 'unknown@example.com')); + assert.ok(!phoneBook.add('5551110011', 'Алексей')); + assert.ok(!phoneBook.add('5555550055')); + }); + + it('должен обновлять существующие записи', function () { + assert.ok(phoneBook.update('5551110011', 'Алексей', 'alex@example.com')); + assert.ok(phoneBook.update('5553330033', 'Валерий')); + }); + + it('должен искать все записи по запросу "*"', function () { + assert.deepStrictEqual(phoneBook.find('*'), [ + 'Алексей, +7 (555) 111-00-11, alex@example.com', + 'Борис, +7 (555) 222-00-22, boris@example.com', + 'Валерий, +7 (555) 333-00-33', + 'Григорий, +7 (555) 444-00-44, grisha@example.com' + ]); + }); + + it('должен искать все записи по запросу "555"', function () { + assert.deepStrictEqual(phoneBook.find('555'), [ + 'Алексей, +7 (555) 111-00-11, alex@example.com', + 'Борис, +7 (555) 222-00-22, boris@example.com', + 'Валерий, +7 (555) 333-00-33', + 'Григорий, +7 (555) 444-00-44, grisha@example.com' + ]); + }); + + it('должен удалять элементы из телефонной книги', function () { + assert.strictEqual(phoneBook.findAndRemove('@'), 3); + }); + + if (phoneBook.isStar) { + it('должен экспортировать из cvs', function () { + var csv = [ + 'Борис;5552220022;boris@example.com', + 'Григорий;5554440044;grisha@example.com', + 'Алексей;5551110011;alex@example.com', + 'Валерий;5553330033;valera@example.com', + 'Неизвестный;3330033;unknown@example.com' + ].join('\n'); + assert.strictEqual(phoneBook.importFromCsv(csv), 4); + }); + } +}); From e1fce6787eb80570be3d81ffc5040ebba5287ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9A=D0=BE?= =?UTF-8?q?=D0=B7=D0=B0=D1=87=D1=83=D0=BA?= <Дмитрий Козачук> Date: 2016年10月14日 06:59:15 +0300 Subject: [PATCH 2/8] first attempt --- phone-book.js | 133 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 126 insertions(+), 7 deletions(-) diff --git a/phone-book.js b/phone-book.js index 69fb468..103dfa1 100644 --- a/phone-book.js +++ b/phone-book.js @@ -9,16 +9,34 @@ exports.isStar = true; /** * Телефонная книга */ -var phoneBook; +var phoneBook = []; /** * Добавление записи в телефонную книгу * @param {String} phone * @param {String} name * @param {String} email + * @returns {Boolean} – true, если если удалось добавить запись; false в противном случае */ exports.add = function (phone, name, email) { + if (!(/\d{9}/.test(phone)) || (name === undefined)) { + return false; + } + for (var i = 0; i < phoneBook.length; i++) { + if ((phoneBook[i].phone === phone) && (phoneBook[i].name !== name)) { + + return false; + } + } + var currentRecord = { + phone: phone, + name: name, + email: email + }; + phoneBook[phoneBook.length] = currentRecord; + + return true; }; /** @@ -26,25 +44,119 @@ exports.add = function (phone, name, email) { * @param {String} phone * @param {String} name * @param {String} email + * @returns {Boolean} – true, если удалось обновить запись; false в противном случае */ exports.update = function (phone, name, email) { + for (var i = 0; i < phoneBook.length; i++) { + if ((phoneBook[i].phone === phone) && (name !== undefined)) { + phoneBook[i].name = name; + phoneBook[i].email = email; + return true; + } + } + + return false; }; /** - * Удаление записей по запросу из телефонной книги + * '1112223344' -> '+7 (111) 222-33-44' + * @param {String} phone + * @returns {String} телефон в нормализованном формате + */ +exports.normalPhone = function (phone) { + + return '+7 (' + phone.substr(0, 3) + ') ' + phone.substr(3, 3) + '-' + phone.substr(6, 2) + + '-' + phone.substr(8, 2); +}; + +/** + * Преобразование объекта - записи телфеонной книги в строку + * @param {Object} record + * @returns {String} запись в одну строку + */ +exports.makeRecordLine = function (record) { + var line; + if (record.email === undefined) { + line = record.name + ', ' + exports.normalPhone(record.phone); + } else { + line = record.name + ', ' + exports.normalPhone(record.phone) + + ', ' + record.email; + } + + return line; +}; + +/** + * Проверка на содержание подстроки + * @param {Object} record * @param {String} query + * @returns {Boolean} true, если есть вхождение query в одно из полей record */ -exports.findAndRemove = function (query) { +exports.haveRecordCoin = function (record, query) { + var key = Object.keys(record); + for (var i = 0; i < key.length; i++) { + if ((record[key[i]] !== undefined) && (record[key[i]].indexOf(query) !== -1)) { + return true; + } + } + + return false; }; /** * Поиск записей по запросу в телефонной книге * @param {String} query + * @returns {Array} отсортированный массив записей, не имеющих пересечений с аргументом */ exports.find = function (query) { + if (query === '') { + + return; + } + var recordFound = []; + if (query === '*') { + for (var i = 0; i < phoneBook.length; i++) { + recordFound[recordFound.length] = exports.makeRecordLine(phoneBook[i]); + } + } + for (var j = 0; j < phoneBook.length; j++) { + if (exports.haveRecordCoin(phoneBook[j], query)) { + recordFound[recordFound.length] = exports.makeRecordLine(phoneBook[j]); + } + } + + return recordFound.sort(); +}; + +/** + * Удаление записей по запросу из телефонной книги + * @param {String} query + * @returns {Number} количество удаленных записей + */ +exports.findAndRemove = function (query) { + if (query === '') { + + return 0; + } + if (query === '*') { + var n = phoneBook.length; + phoneBook = []; + + return n; + } + var recordSave = []; + var countDeleted = phoneBook.length; + for (var i = 0; i < phoneBook.length; i++) { + if (!exports.haveRecordCoin(phoneBook[i], query)) { + recordSave[recordSave.length] = phoneBook[i]; + countDeleted--; + } + } + phoneBook = recordSave; + return countDeleted; }; /** @@ -54,9 +166,16 @@ exports.find = function (query) { * @returns {Number} – количество добавленных и обновленных записей */ exports.importFromCsv = function (csv) { - // Парсим csv - // Добавляем в телефонную книгу - // Либо обновляем, если запись с таким телефоном уже существует + var records = csv.split('\n'); + var record; + var countUpdate = 0; + for (var i = 0; i < records.length; i++) { + record = records[i].split(';'); + if (exports.update(record[1], record[0], record[2]) || + (exports.add(record[1], record[0], record[2]))) { + countUpdate++; + } + } - return csv.split('\n').length; + return countUpdate; }; From 75bbb091e32bc67097242feda8f93accfad655a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9A=D0=BE?= =?UTF-8?q?=D0=B7=D0=B0=D1=87=D1=83=D0=BA?= <Дмитрий Козачук> Date: 2016年10月14日 07:09:40 +0300 Subject: [PATCH 3/8] second attempt --- phone-book.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 103dfa1..feb4c0c 100644 --- a/phone-book.js +++ b/phone-book.js @@ -19,7 +19,7 @@ var phoneBook = []; * @returns {Boolean} – true, если если удалось добавить запись; false в противном случае */ exports.add = function (phone, name, email) { - if (!(/\d{9}/.test(phone)) || (name === undefined)) { + if (!(/\d{9}/.test(phone)) || (name === undefined) || (name === '') { return false; } From 1f8f3ccbbedd7ec5b420722485c0dbf02da40481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9A=D0=BE?= =?UTF-8?q?=D0=B7=D0=B0=D1=87=D1=83=D0=BA?= <Дмитрий Козачук> Date: 2016年10月14日 18:58:56 +0300 Subject: [PATCH 4/8] third attempt --- phone-book.js | 74 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 25 deletions(-) diff --git a/phone-book.js b/phone-book.js index feb4c0c..d11a7a4 100644 --- a/phone-book.js +++ b/phone-book.js @@ -12,31 +12,56 @@ exports.isStar = true; var phoneBook = []; /** - * Добавление записи в телефонную книгу + * Проверка записи в телефонную книгу на корректность * @param {String} phone * @param {String} name * @param {String} email - * @returns {Boolean} – true, если если удалось добавить запись; false в противном случае + * @returns {Boolean} – true, если зпись является корректной; false в противном случае */ -exports.add = function (phone, name, email) { - if (!(/\d{9}/.test(phone)) || (name === undefined) || (name === '') { +exports.isCorrectRecord = function (phone, name, email) { + var isCorrectPhone = /\d{9}/.test(phone); + var isCorrectName = (typeof name === 'string' && name.length> 0); + var isCorrectEmail = (typeof email === 'undefined') || (typeof email === 'string'); - return false; - } + return (isCorrectEmail && isCorrectName && isCorrectPhone); +}; + +/** + * Проверка записи в телефонную книгу на уникальность + * @param {String} phone + * @returns {Number} – -1, если номер не зарегистрирован; номер записи в противном случае + */ +exports.identicalNumber = function (phone) { for (var i = 0; i < phoneBook.length; i++) { - if ((phoneBook[i].phone === phone) && (phoneBook[i].name !== name)) { + if (phoneBook[i].phone === phone) { - return false; + return i; } } - var currentRecord = { - phone: phone, - name: name, - email: email - }; - phoneBook[phoneBook.length] = currentRecord; - - return true; + + return -1; +}; + +/** + * Добавление записи в телефонную книгу + * @param {String} phone + * @param {String} name + * @param {String} email + * @returns {Boolean} – true, если если удалось добавить запись; false в противном случае + */ +exports.add = function (phone, name, email) { + if (exports.isCorrectRecord(phone, name, email) && exports.identicalNumber(phone) === -1) { + var currentRecord = { + phone: phone, + name: name, + email: email + }; + phoneBook.push(currentRecord); + + return true; + } + + return false; }; /** @@ -47,13 +72,12 @@ exports.add = function (phone, name, email) { * @returns {Boolean} – true, если удалось обновить запись; false в противном случае */ exports.update = function (phone, name, email) { - for (var i = 0; i < phoneBook.length; i++) { - if ((phoneBook[i].phone === phone) && (name !== undefined)) { - phoneBook[i].name = name; - phoneBook[i].email = email; + var indexOfRecord = exports.identicalNumber(phone); + if (exports.isCorrectRecord(phone, name, email) && indexOfRecord> -1) { + phoneBook[indexOfRecord].name = name; + phoneBook[indexOfRecord].email = email; - return true; - } + return true; } return false; @@ -118,12 +142,12 @@ exports.find = function (query) { var recordFound = []; if (query === '*') { for (var i = 0; i < phoneBook.length; i++) { - recordFound[recordFound.length] = exports.makeRecordLine(phoneBook[i]); + recordFound.push(exports.makeRecordLine(phoneBook[i])); } } for (var j = 0; j < phoneBook.length; j++) { if (exports.haveRecordCoin(phoneBook[j], query)) { - recordFound[recordFound.length] = exports.makeRecordLine(phoneBook[j]); + recordFound.push(exports.makeRecordLine(phoneBook[j])); } } @@ -150,7 +174,7 @@ exports.findAndRemove = function (query) { var countDeleted = phoneBook.length; for (var i = 0; i < phoneBook.length; i++) { if (!exports.haveRecordCoin(phoneBook[i], query)) { - recordSave[recordSave.length] = phoneBook[i]; + recordSave.push(phoneBook[i]); countDeleted--; } } From 516e8ab727ac7d582a13ad143ad479cb22afb2fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9A=D0=BE?= =?UTF-8?q?=D0=B7=D0=B0=D1=87=D1=83=D0=BA?= <Дмитрий Козачук> Date: 2016年10月14日 19:27:29 +0300 Subject: [PATCH 5/8] non count attempt --- phone-book.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index d11a7a4..7373c89 100644 --- a/phone-book.js +++ b/phone-book.js @@ -19,7 +19,9 @@ var phoneBook = []; * @returns {Boolean} – true, если зпись является корректной; false в противном случае */ exports.isCorrectRecord = function (phone, name, email) { - var isCorrectPhone = /\d{9}/.test(phone); + var isCorrectPhone = (/\d{9}/.test(phone)) && (phone[0] === phone[1]) && + (phone[1] === phone[2]) && (phone[3] === phone[4]) && (phone[4] === phone[5]) && + (phone[6] === phone[7]) && (phone[8] === phone[9]); var isCorrectName = (typeof name === 'string' && name.length> 0); var isCorrectEmail = (typeof email === 'undefined') || (typeof email === 'string'); From ed4879fe421e5acccaef155fa32981404ef00b51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9A=D0=BE?= =?UTF-8?q?=D0=B7=D0=B0=D1=87=D1=83=D0=BA?= <Дмитрий Козачук> Date: 2016年10月14日 20:04:26 +0300 Subject: [PATCH 6/8] fourth attempt --- phone-book.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/phone-book.js b/phone-book.js index 7373c89..2c33af2 100644 --- a/phone-book.js +++ b/phone-book.js @@ -53,12 +53,11 @@ exports.identicalNumber = function (phone) { */ exports.add = function (phone, name, email) { if (exports.isCorrectRecord(phone, name, email) && exports.identicalNumber(phone) === -1) { - var currentRecord = { - phone: phone, - name: name, - email: email - }; - phoneBook.push(currentRecord); + if (typeof email === 'undefined') { + phoneBook.push({ phone: phone, name: name }); + } else { + phoneBook.push({ phone: phone, name: name, email: email }); + } return true; } @@ -77,7 +76,11 @@ exports.update = function (phone, name, email) { var indexOfRecord = exports.identicalNumber(phone); if (exports.isCorrectRecord(phone, name, email) && indexOfRecord> -1) { phoneBook[indexOfRecord].name = name; - phoneBook[indexOfRecord].email = email; + if (typeof email !== 'undefined') { + phoneBook[indexOfRecord].email = email; + } else { + delete phoneBook[indexOfRecord].email; + } return true; } From f655b54c8d2acf36bda20b32963eab8120ac5ef5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9A=D0=BE?= =?UTF-8?q?=D0=B7=D0=B0=D1=87=D1=83=D0=BA?= <Дмитрий Козачук> Date: 2016年10月14日 20:11:05 +0300 Subject: [PATCH 7/8] inspection --- phone-book.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 2c33af2..42fbb96 100644 --- a/phone-book.js +++ b/phone-book.js @@ -4,7 +4,7 @@ * Сделано задание на звездочку * Реализован метод importFromCsv */ -exports.isStar = true; +exports.isStar = false; /** * Телефонная книга From 52dc56728d8d0b9ad31ebb50b072e012b676effb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9A=D0=BE?= =?UTF-8?q?=D0=B7=D0=B0=D1=87=D1=83=D0=BA?= <Дмитрий Козачук> Date: 2016年10月14日 20:28:47 +0300 Subject: [PATCH 8/8] fiveth attempt --- phone-book.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phone-book.js b/phone-book.js index 42fbb96..8867e12 100644 --- a/phone-book.js +++ b/phone-book.js @@ -4,7 +4,7 @@ * Сделано задание на звездочку * Реализован метод importFromCsv */ -exports.isStar = false; +exports.isStar = true; /** * Телефонная книга @@ -142,7 +142,7 @@ exports.haveRecordCoin = function (record, query) { exports.find = function (query) { if (query === '') { - return; + return []; } var recordFound = []; if (query === '*') {

AltStyle によって変換されたページ (->オリジナル) /