From 5ab2968242717a18356bc724a8316416dcd0b342 Mon Sep 17 00:00:00 2001 From: SvetlanaFomina Date: Thu, 12 Oct 2017 11:05:53 +0500 Subject: [PATCH 1/7] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD=D1=82=20=D1=80=D0=B5=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 79 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/phone-book.js b/phone-book.js index 69fb468..b519be8 100644 --- a/phone-book.js +++ b/phone-book.js @@ -9,16 +9,26 @@ exports.isStar = true; /** * Телефонная книга */ -var phoneBook; +var phoneBook = []; /** * Добавление записи в телефонную книгу * @param {String} phone * @param {String} name * @param {String} email + * @returns {Boolean} */ exports.add = function (phone, name, email) { + var validPhone = /\d{10}/; + var isValid = (phone.length === 10) && Boolean(name) && validPhone.test(phone); + isValid = isValid && phoneBook.every(elem => elem.phone !== phone); + if (!isValid) { + return false; + } + email = email ? email : ''; + phoneBook.push({ phone: phone, name: name, email: email }); + return true; }; /** @@ -26,27 +36,74 @@ exports.add = function (phone, name, email) { * @param {String} phone * @param {String} name * @param {String} email + * @returns {Bollean} */ exports.update = function (phone, name, email) { + var index = phoneBook.findIndex(elem => elem.phone === phone); + if ((index === -1) || !(name)) { + return false; + } + phoneBook[index].name = name; + phoneBook[index].email = email ? email : ''; + return true; }; /** * Удаление записей по запросу из телефонной книги * @param {String} query + * @returns {Integer} */ exports.findAndRemove = function (query) { + if (query === '') { + return 0; + } + var oldLength = phoneBook.length; + var result = phoneBook.filter(function (elem) { + var isFind = (query === '*') || (elem.phone.indexOf(query) + 1); + isFind = isFind || (elem.name.indexOf(query) + 1); + isFind = isFind || (String(elem.email).indexOf(query) + 1); + return !isFind; + }); + phoneBook = result; + + return oldLength - phoneBook.length; }; /** * Поиск записей по запросу в телефонной книге * @param {String} query + * @returns {Array} */ exports.find = function (query) { + var result = []; + if (query === '') { + return []; + } + result = phoneBook.map(function (elem) { + var isFind = (query === '*') || (elem.phone.indexOf(query) + 1); + isFind = isFind || (elem.name.indexOf(query) + 1) || (elem.email.indexOf(query) + 1); + if (isFind) { + return correctNote(elem.name, elem.phone, elem.email); + } + + return ''; + }, this); + return result.sort(); }; + +function correctNote(name, phone, email) { + var correctPhone = '+7 (' + phone.slice(0, 3) + ') ' + phone.slice(3, 6); + correctPhone += '-' + phone.slice(6, 8) + '-' + phone.slice(8, 10); + var result = name + ', ' + correctPhone; + result = email ? result + ', ' + email : result; + + return result; +} + /** * Импорт записей из csv-формата * @star @@ -57,6 +114,24 @@ exports.importFromCsv = function (csv) { // Парсим csv // Добавляем в телефонную книгу // Либо обновляем, если запись с таким телефоном уже существует + var notes = csv.split('\n'); + var validPhone = /\d{10}/; + var count = 0; + notes.forEach(function (element) { + var [name, phone, email] = element.split(';'); + var isValid = name !== '' && phone.length === 10 && validPhone.test(phone); + if (isValid) { + var index = phoneBook.findIndex(elem => elem.phone === phone); + count++; + if ((index + 1)) { + phoneBook[index].name = name; + phoneBook[index].email = email ? email : ''; + } else { + email = email ? email : ''; + phoneBook.push({ phone: phone, name: name, email: email }); + } + } + }, this); - return csv.split('\n').length; + return count; }; From d435336bfeae07f0e82bae076178e7a3c8f892fc Mon Sep 17 00:00:00 2001 From: SvetlanaFomina Date: Thu, 12 Oct 2017 11:11:54 +0500 Subject: [PATCH 2/7] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20find?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index b519be8..5d6c87e 100644 --- a/phone-book.js +++ b/phone-book.js @@ -78,7 +78,7 @@ exports.findAndRemove = function (query) { */ exports.find = function (query) { var result = []; - if (query === '') { + if (!(query)) { return []; } result = phoneBook.map(function (elem) { From cd3a16184d4d695ade8caa00849a4f784acb6dd7 Mon Sep 17 00:00:00 2001 From: SvetlanaFomina Date: Thu, 12 Oct 2017 11:16:25 +0500 Subject: [PATCH 3/7] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20csv?= 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 5d6c87e..5847ca5 100644 --- a/phone-book.js +++ b/phone-book.js @@ -55,7 +55,7 @@ exports.update = function (phone, name, email) { * @returns {Integer} */ exports.findAndRemove = function (query) { - if (query === '') { + if (!(query)) { return 0; } var oldLength = phoneBook.length; @@ -119,7 +119,7 @@ exports.importFromCsv = function (csv) { var count = 0; notes.forEach(function (element) { var [name, phone, email] = element.split(';'); - var isValid = name !== '' && phone.length === 10 && validPhone.test(phone); + var isValid = phone.length === 10 && validPhone.test(phone) && (name); if (isValid) { var index = phoneBook.findIndex(elem => elem.phone === phone); count++; From ccc8542aa8785df4d6abb4bbaff1699c9b55d9e5 Mon Sep 17 00:00:00 2001 From: SvetlanaFomina Date: Thu, 12 Oct 2017 11:18:55 +0500 Subject: [PATCH 4/7] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=8B=D1=82=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=81=D0=B4=D0=B0=D1=82=D1=8C=20=D1=85=D0=BE=D1=82=D1=8F?= =?UTF-8?q?=D0=B1=D1=8B=20=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=BD=D0=BE=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 5847ca5..9a83884 100644 --- a/phone-book.js +++ b/phone-book.js @@ -4,7 +4,7 @@ * Сделано задание на звездочку * Реализован метод importFromCsv */ -exports.isStar = true; +exports.isStar = false; /** * Телефонная книга From bc8c49a5bc7131d1619c04d17bd86b00d828b7cc Mon Sep 17 00:00:00 2001 From: SvetlanaFomina Date: Thu, 12 Oct 2017 11:31:41 +0500 Subject: [PATCH 5/7] =?UTF-8?q?=D0=9E=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=87=D0=B8=D1=81=D0=BB=D0=BE=D0=B2=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=BD=D0=BE=D0=BC=D0=B5=D1=80=D0=B0=20=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D1=84=D0=BE=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 9a83884..53e8ca0 100644 --- a/phone-book.js +++ b/phone-book.js @@ -4,7 +4,7 @@ * Сделано задание на звездочку * Реализован метод importFromCsv */ -exports.isStar = false; +exports.isStar = true; /** * Телефонная книга @@ -20,6 +20,7 @@ var phoneBook = []; */ exports.add = function (phone, name, email) { var validPhone = /\d{10}/; + phone = String(phone); var isValid = (phone.length === 10) && Boolean(name) && validPhone.test(phone); isValid = isValid && phoneBook.every(elem => elem.phone !== phone); if (!isValid) { @@ -39,6 +40,7 @@ exports.add = function (phone, name, email) { * @returns {Bollean} */ exports.update = function (phone, name, email) { + phone = String(phone); var index = phoneBook.findIndex(elem => elem.phone === phone); if ((index === -1) || !(name)) { return false; From c6faf3e4ce4cf033e1e66e5bfe90f91489c98c3f Mon Sep 17 00:00:00 2001 From: SvetlanaFomina Date: Thu, 12 Oct 2017 12:00:36 +0500 Subject: [PATCH 6/7] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0=D1=86=D0=B8=D1=8E?= =?UTF-8?q?=20email?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 53e8ca0..1b2df2a 100644 --- a/phone-book.js +++ b/phone-book.js @@ -20,9 +20,11 @@ var phoneBook = []; */ exports.add = function (phone, name, email) { var validPhone = /\d{10}/; + var validEmail = /.*@.*/; phone = String(phone); var isValid = (phone.length === 10) && Boolean(name) && validPhone.test(phone); isValid = isValid && phoneBook.every(elem => elem.phone !== phone); + isValid = isValid && (validEmail.test(email) || !(email)); if (!isValid) { return false; } @@ -41,8 +43,9 @@ exports.add = function (phone, name, email) { */ exports.update = function (phone, name, email) { phone = String(phone); + var validEmail = /.*@.*/; var index = phoneBook.findIndex(elem => elem.phone === phone); - if ((index === -1) || !(name)) { + if ((index === -1) || !(name) || !(validEmail.test(email) || !(email))) { return false; } phoneBook[index].name = name; From b245f851f925d9fa4a66780fa5562e245ce820a1 Mon Sep 17 00:00:00 2001 From: SvetlanaFomina Date: Thu, 12 Oct 2017 12:09:16 +0500 Subject: [PATCH 7/7] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/phone-book.js b/phone-book.js index 1b2df2a..7d8c3e6 100644 --- a/phone-book.js +++ b/phone-book.js @@ -24,7 +24,7 @@ exports.add = function (phone, name, email) { phone = String(phone); var isValid = (phone.length === 10) && Boolean(name) && validPhone.test(phone); isValid = isValid && phoneBook.every(elem => elem.phone !== phone); - isValid = isValid && (validEmail.test(email) || !(email)); + isValid = isValid && (!(email) || validEmail.test(email)); if (!isValid) { return false; } @@ -44,8 +44,9 @@ exports.add = function (phone, name, email) { exports.update = function (phone, name, email) { phone = String(phone); var validEmail = /.*@.*/; + phone = String(phone); var index = phoneBook.findIndex(elem => elem.phone === phone); - if ((index === -1) || !(name) || !(validEmail.test(email) || !(email))) { + if ((index === -1) || !(name) || !(!(email) || validEmail.test(email))) { return false; } phoneBook[index].name = name; @@ -63,6 +64,7 @@ exports.findAndRemove = function (query) { if (!(query)) { return 0; } + query = String(query); var oldLength = phoneBook.length; var result = phoneBook.filter(function (elem) { var isFind = (query === '*') || (elem.phone.indexOf(query) + 1); @@ -86,6 +88,7 @@ exports.find = function (query) { if (!(query)) { return []; } + query = String(query); result = phoneBook.map(function (elem) { var isFind = (query === '*') || (elem.phone.indexOf(query) + 1); isFind = isFind || (elem.name.indexOf(query) + 1) || (elem.email.indexOf(query) + 1);