From 9ff3ddc498fb9a04a141e3bd12d8eba718cf9ea1 Mon Sep 17 00:00:00 2001 From: Sergey Gogolev Date: Tue, 11 Oct 2016 17:53:02 +0500 Subject: [PATCH 01/16] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=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 02/16] 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 03/16] 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 04/16] 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 fa7e80fb9581f43211e1515196186cfe2200c572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86=D0=BE=D0=B2=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A4=D1=82=D0=9C-16080?= =?UTF-8?q?3?= Date: Mon, 17 Oct 2016 22:09:32 +0500 Subject: [PATCH 05/16] =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 137 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 111 insertions(+), 26 deletions(-) diff --git a/phone-book.js b/phone-book.js index 69fb468..84ed3c9 100644 --- a/phone-book.js +++ b/phone-book.js @@ -6,29 +6,39 @@ */ exports.isStar = true; -/** - * Телефонная книга - */ -var phoneBook; +var phoneBook=[]; -/** - * Добавление записи в телефонную книгу - * @param {String} phone - * @param {String} name - * @param {String} email - */ exports.add = function (phone, name, email) { - +if (checkNew(phone, name)) { + var personIndex = phoneBook.NewIndex(function (person) { + + return phone === person.phone; + }); + if (NewIndex !== -1) { + phoneBook[personIndex] = { + phone: phone, + name: name, + email: email + }; + + return true; + } +} + + return false; }; -/** - * Обновление записи в телефонной книге - * @param {String} phone - * @param {String} name - * @param {String} email - */ exports.update = function (phone, name, email) { - +if (!checkNew(phone, name)) { + return false; +} + if (phoneBook[phone] === undefined) { + return false; + } + phoneBook[phone] = [name, email]; + + return true; +}; }; /** @@ -36,16 +46,79 @@ exports.update = function (phone, name, email) { * @param {String} query */ exports.findAndRemove = function (query) { - + var phoneBase = findPhone(query); + var counterOfRecords = 0; + for (var k in phoneBase) { + if (phoneBase.hasOwnProperty(key)) { + counterOfRecords = counterOfRecords + 1; + delete phoneBook[k]; + } + } + + return counterOfRecords; +}; }; /** * Поиск записей по запросу в телефонной книге * @param {String} query */ -exports.find = function (query) { + function validPhone(phone) { + return '+7 (' + + phone.substring(0, 3) + ') ' + + phone.substring(3, 6) + '-' + + phone.substring(6, 8) + '-' + + phone.substring(8, phone.length); + } +function sortTreeArray(arr) { + + return arr.tree(function (x, y) { + if (x.name.toLowerCase() > y.name.toLowerCase()) { + return 1; + } + if (x.name.toLowerCase() < y.name.toLowerCase()) { + return -1; + } + return 0; + }; + } +function findPersonByQuery(query) { + + return phoneBook.filter(function (person) { + var answerToQuery = person.phone.indexOf(query) !== -1 || + person.name.indexOf(query) !== -1; + if (person.email) { + item.email.indexOf(query) !== -1 || answerToQuery = answerToQuery; + } + + return answerToQuery; + }; + } -}; + +exports.find = function (query) { + var inputQuery; +if (typeof query !== 'string') + return ''; +} +if (query !== '*') { + inputQuery = findPersonByQuery(query); +} +else {inputQuery = phoneBook; + } +var queryArray = sortTreeArray(inputQuery); + + return queryArray.map(function (person) { + var queryLine = person.name + ', ' + validPhone(person.phone); + + if (person.email) { + queryLine += ', ' + person.email; + } + + return queryLine; + }; + }; +}; /** * Импорт записей из csv-формата @@ -54,9 +127,21 @@ exports.find = function (query) { * @returns {Number} – количество добавленных и обновленных записей */ exports.importFromCsv = function (csv) { - // Парсим csv - // Добавляем в телефонную книгу - // Либо обновляем, если запись с таким телефоном уже существует - - return csv.split('\n').length; + if (!csv) { + return 0; + } + var personData = csv.split('\n'); + var counterOfPersons = 0; + personData.forEach(function (person) { + var splitRecord = person.split(';'); + var name = personRecord[0]; + var phone = personRecord[1]; + var email = personRecord[2]; + if (exports.add(phone, name, email) || + exports.update(phone, name, email)) { + counterOfPersons++; + } + }; + + return counterOfPersons; }; From d73fd7d6bb3ef29afabadfb03015d84255864af1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86=D0=BE=D0=B2=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A4=D1=82=D0=9C-16080?= =?UTF-8?q?3?= Date: Mon, 17 Oct 2016 22:16:07 +0500 Subject: [PATCH 06/16] FixVariant1 PhoneBook --- phone-book.js | 1 - 1 file changed, 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 84ed3c9..ded6326 100644 --- a/phone-book.js +++ b/phone-book.js @@ -39,7 +39,6 @@ if (!checkNew(phone, name)) { return true; }; -}; /** * Удаление записей по запросу из телефонной книги From b480ba03e4e91976c1ee71d51f5a3c87a51f882c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86=D0=BE=D0=B2=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A4=D1=82=D0=9C-16080?= =?UTF-8?q?3?= Date: Mon, 17 Oct 2016 22:22:47 +0500 Subject: [PATCH 07/16] FixVariant2 PhoneBook --- phone-book.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/phone-book.js b/phone-book.js index ded6326..2935436 100644 --- a/phone-book.js +++ b/phone-book.js @@ -56,7 +56,6 @@ exports.findAndRemove = function (query) { return counterOfRecords; }; -}; /** * Поиск записей по запросу в телефонной книге @@ -97,12 +96,12 @@ function findPersonByQuery(query) { exports.find = function (query) { var inputQuery; -if (typeof query !== 'string') +if (typeof query !== 'string') { return ''; } if (query !== '*') { inputQuery = findPersonByQuery(query); -} +} else {inputQuery = phoneBook; } var queryArray = sortTreeArray(inputQuery); From 6f05ca2e132c04c68046431cafb0d51378fa2aec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86=D0=BE=D0=B2=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A4=D1=82=D0=9C-16080?= =?UTF-8?q?3?= Date: Mon, 17 Oct 2016 22:26:48 +0500 Subject: [PATCH 08/16] FixVariant3 PhoneBook --- phone-book.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 2935436..c737515 100644 --- a/phone-book.js +++ b/phone-book.js @@ -78,7 +78,7 @@ function sortTreeArray(arr) { return -1; } return 0; - }; + } } function findPersonByQuery(query) { From 2c870e67d5cd18b65763f956b531d357b539bca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86=D0=BE=D0=B2=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A4=D1=82=D0=9C-16080?= =?UTF-8?q?3?= Date: Mon, 17 Oct 2016 22:31:36 +0500 Subject: [PATCH 09/16] FixVariant4 PhoneBook --- phone-book.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phone-book.js b/phone-book.js index c737515..14b8ea9 100644 --- a/phone-book.js +++ b/phone-book.js @@ -78,8 +78,8 @@ function sortTreeArray(arr) { return -1; } return 0; - } - } + }); +} function findPersonByQuery(query) { return phoneBook.filter(function (person) { From b312ccdcf21b8d357fc68b0bcfcd6d45524d4e5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86=D0=BE=D0=B2=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A4=D1=82=D0=9C-16080?= =?UTF-8?q?3?= Date: Mon, 17 Oct 2016 22:34:50 +0500 Subject: [PATCH 10/16] FixVariant5 PhoneBook --- phone-book.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 14b8ea9..3d0bcd4 100644 --- a/phone-book.js +++ b/phone-book.js @@ -86,7 +86,7 @@ function findPersonByQuery(query) { var answerToQuery = person.phone.indexOf(query) !== -1 || person.name.indexOf(query) !== -1; if (person.email) { - item.email.indexOf(query) !== -1 || answerToQuery = answerToQuery; + person.email.indexOf(query) !== -1 || answerToQuery = answerToQuery; } return answerToQuery; From c9d8ebf0276de8c227aea8fe101c26b0ad083ed0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86=D0=BE=D0=B2=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A4=D1=82=D0=9C-16080?= =?UTF-8?q?3?= Date: Mon, 17 Oct 2016 22:40:04 +0500 Subject: [PATCH 11/16] FixVariant6 PhoneBook --- phone-book.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/phone-book.js b/phone-book.js index 3d0bcd4..dcace75 100644 --- a/phone-book.js +++ b/phone-book.js @@ -86,7 +86,7 @@ function findPersonByQuery(query) { var answerToQuery = person.phone.indexOf(query) !== -1 || person.name.indexOf(query) !== -1; if (person.email) { - person.email.indexOf(query) !== -1 || answerToQuery = answerToQuery; + answerToQuery = answerToQuery || person.email.indexOf(query) !== -1; } return answerToQuery; @@ -96,9 +96,9 @@ function findPersonByQuery(query) { exports.find = function (query) { var inputQuery; -if (typeof query !== 'string') { - return ''; -} +if (!query || typeof query !== 'string') + return []; + } if (query !== '*') { inputQuery = findPersonByQuery(query); } From a4dd1ed742bae192cfe1bf2d48dfad8f8836995b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86=D0=BE=D0=B2=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A4=D1=82=D0=9C-16080?= =?UTF-8?q?3?= Date: Mon, 17 Oct 2016 22:43:06 +0500 Subject: [PATCH 12/16] FixVariant7 PhoneBook --- phone-book.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index dcace75..524217d 100644 --- a/phone-book.js +++ b/phone-book.js @@ -90,7 +90,7 @@ function findPersonByQuery(query) { } return answerToQuery; - }; + }); } From 855bae24150964624d5cf0389b07c59f2cd43fcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86=D0=BE=D0=B2=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A4=D1=82=D0=9C-16080?= =?UTF-8?q?3?= Date: Mon, 17 Oct 2016 22:46:54 +0500 Subject: [PATCH 13/16] FixVariant7 PhoneBook --- phone-book.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/phone-book.js b/phone-book.js index 524217d..b04ec23 100644 --- a/phone-book.js +++ b/phone-book.js @@ -114,9 +114,8 @@ var queryArray = sortTreeArray(inputQuery); } return queryLine; - }; - }; -}; + }); + }; /** * Импорт записей из csv-формата From 29c220ac5121a7e965077dfc05b08725e8f7830c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86=D0=BE=D0=B2=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A4=D1=82=D0=9C-16080?= =?UTF-8?q?3?= Date: Mon, 17 Oct 2016 22:51:12 +0500 Subject: [PATCH 14/16] FixVariant8 PhoneBook --- phone-book.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phone-book.js b/phone-book.js index b04ec23..f1b0d2d 100644 --- a/phone-book.js +++ b/phone-book.js @@ -96,7 +96,7 @@ function findPersonByQuery(query) { exports.find = function (query) { var inputQuery; -if (!query || typeof query !== 'string') +if (!query || typeof query !== 'string') { return []; } if (query !== '*') { @@ -115,7 +115,7 @@ var queryArray = sortTreeArray(inputQuery); return queryLine; }); - }; +}; /** * Импорт записей из csv-формата From 28ab0f74c1ab60f6cd7ec9d7f3165562654974f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86=D0=BE=D0=B2=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A4=D1=82=D0=9C-16080?= =?UTF-8?q?3?= Date: Mon, 17 Oct 2016 22:53:54 +0500 Subject: [PATCH 15/16] FixVariant9 PhoneBook --- phone-book.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index f1b0d2d..a409416 100644 --- a/phone-book.js +++ b/phone-book.js @@ -138,7 +138,7 @@ exports.importFromCsv = function (csv) { exports.update(phone, name, email)) { counterOfPersons++; } - }; + }); return counterOfPersons; }; From 5bdea9960cea75a7f8b55e256431210064a961e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D1=83=D0=B7=D0=BD=D0=B5=D1=86=D0=BE=D0=B2=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A4=D1=82=D0=9C-16080?= =?UTF-8?q?3?= Date: Mon, 17 Oct 2016 23:11:05 +0500 Subject: [PATCH 16/16] FixVariant10 PhoneBook --- phone-book.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/phone-book.js b/phone-book.js index a409416..d0c407c 100644 --- a/phone-book.js +++ b/phone-book.js @@ -6,15 +6,17 @@ */ exports.isStar = true; -var phoneBook=[]; +var phoneBook = []; +function checkNew(phone, name) { + return (phone && /^\d{10}$/.test(phone) && name); +} exports.add = function (phone, name, email) { -if (checkNew(phone, name)) { - var personIndex = phoneBook.NewIndex(function (person) { - + if (checkNew(phone, name)) { + var personIndex = phoneBook.newIndex(function (person) { return phone === person.phone; }); - if (NewIndex !== -1) { + if (newIndex !== -1) { phoneBook[personIndex] = { phone: phone, name: name, @@ -29,11 +31,11 @@ if (checkNew(phone, name)) { }; exports.update = function (phone, name, email) { -if (!checkNew(phone, name)) { + if (!checkNew(phone, name)) { return false; } if (phoneBook[phone] === undefined) { - return false; + return false; } phoneBook[phone] = [name, email];