From 9ff3ddc498fb9a04a141e3bd12d8eba718cf9ea1 Mon Sep 17 00:00:00 2001 From: Sergey Gogolev Date: Tue, 11 Oct 2016 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 e066b19c35248222463057fbb6097e270befd4af Mon Sep 17 00:00:00 2001 From: Sergey Gogolev Date: Tue, 11 Oct 2016 20:33:47 +0500 Subject: [PATCH 2/8] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 133405a..3ec5051 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ * На вход принимает «Телефон», «Имя» и «Электронную почту» * Возвращает true или false в зависимости от успеха опереации * Телефоны принимаются **только** в формате 5556667788 (без кода) +* Не добавляет **уже существующую** запись Метод __update__ для обновления записей: * На вход принимает «Телефон», «Имя» и «Электронную почту» From 4bd5295534078cb4d410412545007a49d50fe521 Mon Sep 17 00:00:00 2001 From: Sergey Gogolev Date: Tue, 11 Oct 2016 23:36:37 +0500 Subject: [PATCH 3/8] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ec5051..44a59bf 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ * Ищет вхождение этой строки хотя бы в одно из полей «Телефон», «Имя» и «Электронную почту» * Возвращает отсортированный по «Имени» массив строк в формате `name, phone, email` * «Имя» и «Электронную почту» выводит как есть, а «Телефон» в формате `+7 (555) 666-77-88` -* Пустой запрос не должен ничего не находить +* Пустой запрос не должен ничего находить * Запрос «*» находит все записи Метод __findAndRemove__ для удаления записей: From 57ce796ce091e57cd61b2af0de88d973506901df Mon Sep 17 00:00:00 2001 From: Sergey Gogolev Date: Fri, 14 Oct 2016 00:16:56 +0500 Subject: [PATCH 4/8] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 44a59bf..1ce4fbf 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ * Возвращает true или false в зависимости от успеха опереации * Телефоны принимаются **только** в формате 5556667788 (без кода) * Не добавляет **уже существующую** запись +* Не добавляет запись **без имени** Метод __update__ для обновления записей: * На вход принимает «Телефон», «Имя» и «Электронную почту» From 52034a4a259004fd683ff9c1c2a67ce5406ff064 Mon Sep 17 00:00:00 2001 From: Daniilmaslov Date: Mon, 17 Oct 2016 21:17:50 +0500 Subject: [PATCH 5/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BF=D0=B5=D1=80=D0=B2=D1=8B=D0=B9=20=D0=B2=D0=B0?= =?UTF-8?q?=D1=80=D0=B8=D0=B0=D0=BD=D1=82=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 140 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 139 insertions(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 69fb468..17cf6e8 100644 --- a/phone-book.js +++ b/phone-book.js @@ -5,7 +5,7 @@ * Реализован метод importFromCsv */ exports.isStar = true; - +exports.isStar = false; /** * Телефонная книга */ @@ -17,18 +17,85 @@ var phoneBook; * @param {String} name * @param {String} email */ +function checkPhone(phone){ + var phoneReg = /^\d{10}$/; + if (phone !== undefined && !phoneReg.test(phone)) { + + return false; + } + + return true; + } exports.add = function (phone, name, email) { + if (checkPhone(phone) && correctName(name) && checkUnique(phone)) { + if (email === undefined || correctEmail(email)) { + phoneBook.push({ + phone: phone, + name: name, + email: email + }); + } + return true + } + + return false }; +function checkUnique(element) { + for (var i = 0; i < phoneBook.length; i++) { + if (element === phoneBook[i].phone) { + + return false; + } + } + return true; +} +function correctName(name) { + if(name === undefined || (typeof value === 'string') || value !== '') { + + return false; + } + + return true; +} +function correctEmail(email) { + if(email === undefined || (typeof value === 'string') || value !== '') { + + return false; + } + + return true; + } /** * Обновление записи в телефонной книге * @param {String} phone * @param {String} name * @param {String} email */ +function FindPhone(phone) { + for (var i = 0; i < phoneBook.length; i++) { + if (phoneBook[i].phone === phone) { + + return phoneBook[i]; + } + } + + return false; +} exports.update = function (phone, name, email) { + if (checkPhone(phone) && correctName(name)) { + var UpdatePhone = FindPhone(phone); + if (UpdatePhone !== false) { + UpdatePhone.name = name; + UpdatePhone.email = email; + + return true; + } + + } + return false; }; /** @@ -36,15 +103,86 @@ exports.update = function (phone, name, email) { * @param {String} query */ exports.findAndRemove = function (query) { + var Counter = 0; + var realEmail=''; + if (correctName(query)) { + var refreshedBook = phoneBook.filter(function (element) { + if (element.email === undefined) { + realEmail=''; + } else { + realEmail=', ' + element.email; + }; + var lowerQuery = query.toLowerCase(); + return (element.phone.indexOf(query) === -1 && + element.name.toLowerCase().indexOf(lowerQuery) === -1 && + realEmail.toLowerCase().indexOf(lowerQuery) === -1); + }); + if (query === '*') { + Counter = phoneBook.length; + phoneBook = []; + + return Counter; + + } + Counter = phoneBook.length - refreshedBook.length; + phoneBook = refreshedBook; + } + return Counter; }; +function returnEmail(Name, Phone, Email) { + var returnStr = ''; + if (Email !== undefined && Email !== null) { + returnStr = Name + ', ' + Phone + ', ' + Email; + } else { + returnStr = Name + ', ' + Phone; + } + + return returnStr; +} + +function comfortFormat(phone) { + + return ( + '+7 (' + phone.slice(0, 3) + + ') ' + phone.slice(3, 6) + + '-' + phone.slice(6, 8) + + '-' + phone.slice(8)); +} /** * Поиск записей по запросу в телефонной книге * @param {String} query */ exports.find = function (query) { + if ((query === undefined) || (query === null) || (query === '')) { + var empty = []; + + return empty; + } + if (query === '*') { + query = ''; + } + var coincidencePhone = []; + for (var i = 0; i < phoneBook.length; i++) { + var bookName = (phoneBook[i]._name.indexOf(query) !== -1); + var bookPhone = (phoneBook[i]._phone.indexOf(query) !== -1); + var bookEmail; + if (phoneBook[i]._email !== undefined && phoneBook[i]._email !== null) { + bookEmail = (phoneBook[i]._email.indexOf(query) !== -1); + } else { + bookEmail = false; + } + if (bookName || bookPhone || bookEmail) { + var currentName = phoneBook[i]._name; + var currentPhone = comfortFormat(phoneBook[i]._phone); + var currentEmail = phoneBook[i]._email; + coincidencePhone.push(returnEmail(currentName, currentPhone, currentEmail)); + } + } + coincidencePhone.sort(); + return coincidencePhone; }; /** From ebc5c0b58a67e070bcb8d9e651485fc5d729dee9 Mon Sep 17 00:00:00 2001 From: Daniilmaslov Date: Mon, 17 Oct 2016 22:48:20 +0500 Subject: [PATCH 6/8] =?UTF-8?q?2=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD?= =?UTF-8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 78 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/phone-book.js b/phone-book.js index 17cf6e8..587ac91 100644 --- a/phone-book.js +++ b/phone-book.js @@ -10,22 +10,24 @@ exports.isStar = false; * Телефонная книга */ var phoneBook; +var phoneBook = []; /** * Добавление записи в телефонную книгу * @param {String} phone * @param {String} name * @param {String} email + * @returns {Bool} */ function checkPhone(phone){ var phoneReg = /^\d{10}$/; if (phone !== undefined && !phoneReg.test(phone)) { - return false; + return false; } return true; - } +} exports.add = function (phone, name, email) { if (checkPhone(phone) && correctName(name) && checkUnique(phone)) { if (email === undefined || correctEmail(email)) { @@ -36,10 +38,10 @@ exports.add = function (phone, name, email) { }); } - return true + return true; } - return false + return false; }; function checkUnique(element) { for (var i = 0; i < phoneBook.length; i++) { @@ -52,7 +54,7 @@ function checkUnique(element) { return true; } function correctName(name) { - if(name === undefined || (typeof value === 'string') || value !== '') { + if (name === undefined || (typeof name === 'string') || name !== '') { return false; } @@ -60,20 +62,22 @@ function correctName(name) { return true; } function correctEmail(email) { - if(email === undefined || (typeof value === 'string') || value !== '') { + if (email === undefined || (typeof email === 'string') || email !== '') { - return false; + return false; } return true; - } +} + /** * Обновление записи в телефонной книге * @param {String} phone * @param {String} name * @param {String} email + * @returns {Bool} */ -function FindPhone(phone) { +function findPhone(phone) { for (var i = 0; i < phoneBook.length; i++) { if (phoneBook[i].phone === phone) { @@ -85,7 +89,7 @@ function FindPhone(phone) { } exports.update = function (phone, name, email) { if (checkPhone(phone) && correctName(name)) { - var UpdatePhone = FindPhone(phone); + var UpdatePhone = findPhone(phone); if (UpdatePhone !== false) { UpdatePhone.name = name; UpdatePhone.email = email; @@ -104,15 +108,16 @@ exports.update = function (phone, name, email) { */ exports.findAndRemove = function (query) { var Counter = 0; - var realEmail=''; + var realEmail; if (correctName(query)) { var refreshedBook = phoneBook.filter(function (element) { if (element.email === undefined) { realEmail=''; - } else { + } else { realEmail=', ' + element.email; - }; + } var lowerQuery = query.toLowerCase(); + return (element.phone.indexOf(query) === -1 && element.name.toLowerCase().indexOf(lowerQuery) === -1 && realEmail.toLowerCase().indexOf(lowerQuery) === -1); @@ -150,39 +155,47 @@ function comfortFormat(phone) { '-' + phone.slice(6, 8) + '-' + phone.slice(8)); } + /** * Поиск записей по запросу в телефонной книге * @param {String} query */ -exports.find = function (query) { - if ((query === undefined) || (query === null) || (query === '')) { - var empty = []; - - return empty; - } - if (query === '*') { - query = ''; - } +function search(query) { var coincidencePhone = []; for (var i = 0; i < phoneBook.length; i++) { - var bookName = (phoneBook[i]._name.indexOf(query) !== -1); - var bookPhone = (phoneBook[i]._phone.indexOf(query) !== -1); - var bookEmail; + var Name = (phoneBook[i]._name.indexOf(query) !== -1); + var Phone = (phoneBook[i]._phone.indexOf(query) !== -1); + var Email; if (phoneBook[i]._email !== undefined && phoneBook[i]._email !== null) { - bookEmail = (phoneBook[i]._email.indexOf(query) !== -1); + Email = (phoneBook[i]._email.indexOf(query) !== -1); } else { - bookEmail = false; + Email = false; } - if (bookName || bookPhone || bookEmail) { + if (Name || Phone || Email) { var currentName = phoneBook[i]._name; - var currentPhone = comfortFormat(phoneBook[i]._phone); + var currentPhone = formatPhone(phoneBook[i]._phone); var currentEmail = phoneBook[i]._email; + coincidencePhone.push(returnEmail(currentName, currentPhone, currentEmail)); - } + } + } + + return coincidencePhone; +} + +exports.find = function (query) { + if ((query === undefined) || (query === null) || (query === '')) { + var empty = []; + + return empty; + } + if (query === '*') { + query = ''; } - coincidencePhone.sort(); + var phoneBook = search(query); + phoneBook.sort(); - return coincidencePhone; + return phoneBook; }; /** @@ -190,6 +203,7 @@ exports.find = function (query) { * @star * @param {String} csv * @returns {Number} – количество добавленных и обновленных записей + * @returns {Bool} */ exports.importFromCsv = function (csv) { // Парсим csv From 405ab6fbea54be07eba038e1b8e23f19e85b3154 Mon Sep 17 00:00:00 2001 From: Daniilmaslov Date: Mon, 17 Oct 2016 22:59:56 +0500 Subject: [PATCH 7/8] =?UTF-8?q?3=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD?= =?UTF-8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/phone-book.js b/phone-book.js index 587ac91..091e1bb 100644 --- a/phone-book.js +++ b/phone-book.js @@ -6,11 +6,11 @@ */ exports.isStar = true; exports.isStar = false; + /** * Телефонная книга */ var phoneBook; -var phoneBook = []; /** * Добавление записи в телефонную книгу @@ -19,7 +19,7 @@ var phoneBook = []; * @param {String} email * @returns {Bool} */ -function checkPhone(phone){ +function checkPhone(phone) { var phoneReg = /^\d{10}$/; if (phone !== undefined && !phoneReg.test(phone)) { @@ -36,10 +36,10 @@ exports.add = function (phone, name, email) { name: name, email: email }); - } + }; return true; - } + }; return false; }; @@ -105,6 +105,7 @@ exports.update = function (phone, name, email) { /** * Удаление записей по запросу из телефонной книги * @param {String} query + * @returns {Bool} */ exports.findAndRemove = function (query) { var Counter = 0; @@ -112,9 +113,9 @@ exports.findAndRemove = function (query) { if (correctName(query)) { var refreshedBook = phoneBook.filter(function (element) { if (element.email === undefined) { - realEmail=''; + realEmail = ''; } else { - realEmail=', ' + element.email; + realEmail = ', ' + element.email; } var lowerQuery = query.toLowerCase(); @@ -159,6 +160,7 @@ function comfortFormat(phone) { /** * Поиск записей по запросу в телефонной книге * @param {String} query + * @returns {Bool} */ function search(query) { var coincidencePhone = []; @@ -173,14 +175,13 @@ function search(query) { } if (Name || Phone || Email) { var currentName = phoneBook[i]._name; - var currentPhone = formatPhone(phoneBook[i]._phone); + var currentPhone = comfortFormat(phoneBook[i]._phone); var currentEmail = phoneBook[i]._email; - coincidencePhone.push(returnEmail(currentName, currentPhone, currentEmail)); - } - } + } + } - return coincidencePhone; + return coincidencePhone; } exports.find = function (query) { @@ -192,10 +193,10 @@ exports.find = function (query) { if (query === '*') { query = ''; } - var phoneBook = search(query); - phoneBook.sort(); + var Book = search(query); + Book.sort(); - return phoneBook; + return Book; }; /** From c1c97c2091e7a6e7259a019f879bb3d51e42c436 Mon Sep 17 00:00:00 2001 From: Daniilmaslov Date: Mon, 17 Oct 2016 23:02:49 +0500 Subject: [PATCH 8/8] =?UTF-8?q?4=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD?= =?UTF-8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phone-book.js b/phone-book.js index 091e1bb..e48ca87 100644 --- a/phone-book.js +++ b/phone-book.js @@ -36,10 +36,10 @@ exports.add = function (phone, name, email) { name: name, email: email }); - }; + } return true; - }; + } return false; };