From 31011275f49882e2ccc72d1f2a824d1e231684a6 Mon Sep 17 00:00:00 2001 From: sofelvpopel Date: Thu, 25 Oct 2018 00:14:02 +0500 Subject: [PATCH 1/5] qwe --- phone-book.js | 82 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 78 insertions(+), 4 deletions(-) diff --git a/phone-book.js b/phone-book.js index 891d7c01..3ca6509d 100644 --- a/phone-book.js +++ b/phone-book.js @@ -9,7 +9,7 @@ const isStar = true; /** * Телефонная книга */ -let phoneBook; +let phoneBook = {}; /** * Добавление записи в телефонную книгу @@ -18,8 +18,21 @@ let phoneBook; * @param {String?} email * @returns {Boolean} */ -function add(phone, name, email) { +function add(phone = '', name = '', email = '') { + const validPhone = /^(\d)\1\1(\d)\2\2(\d)\3(\d)\4$/.test(phone); + const contact = phoneBook[phone]; + if (!validPhone || !name || contact) { + return false; + } + + phoneBook[phone] = { + phone, + name, + email + }; + + return true; } /** @@ -29,8 +42,17 @@ function add(phone, name, email) { * @param {String?} email * @returns {Boolean} */ -function update(phone, name, email) { +function update(phone = '', name = '', email = '') { + const contact = phoneBook[phone]; + + if (!contact || !name) { + return false; + } + contact.name = name; + contact.email = email; + + return true; } /** @@ -39,7 +61,10 @@ function update(phone, name, email) { * @returns {Number} */ function findAndRemove(query) { + const result = findAll(query); + result.forEach(r => delete phoneBook[r.phone]); + return result.length; } /** @@ -48,7 +73,45 @@ function findAndRemove(query) { * @returns {String[]} */ function find(query) { + const result = findAll(query); + + return result.map(c => { + let r = `${c.name}, ${toFullPhone(c.phone)}`; + if (c.email) { + r += `, ${c.email}`; + } + + return r; + }); +} + +function findAll(query) { + if (!query) { + return []; + } + + let allContacts = Object.keys(phoneBook).map(p => phoneBook[p]); + + if (query !== '*') { + const regEx = new RegExp(query); + + allContacts = allContacts.filter(c => + regEx.test(c.name) || + regEx.test(c.phone) || + regEx.test(c.email) + ); + } + + allContacts.sort((a, b) => b.name > a.name ? -1 : 1); + + return allContacts; +} + +function toFullPhone(phone) { + const code = phone.substr(0, 3); + + return `+7 (${code}) ${phone.substr(3, 3)}-${phone.substr(6, 2)}-${phone.substr(8, 2)}`; } /** @@ -61,8 +124,19 @@ function importFromCsv(csv) { // Парсим csv // Добавляем в телефонную книгу // Либо обновляем, если запись с таким телефоном уже существует + csv.split('\n') + .forEach(str => { + const contactArray = str.split(';'); + const obj = { + name: contactArray[0], + phone: contactArray[1], + email: contactArray[2] + }; + + phoneBook[obj.phone] = obj; + }); - return csv.split('\n').length; + return csv.split('\n').length - 1; } module.exports = { From b967d374cca8dd0c2f3256c6cc32dc2e0d5b40bb Mon Sep 17 00:00:00 2001 From: sofelvpopel Date: Thu, 25 Oct 2018 00:16:26 +0500 Subject: [PATCH 2/5] qwe --- phone-book.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 3ca6509d..3fe83412 100644 --- a/phone-book.js +++ b/phone-book.js @@ -4,7 +4,7 @@ * Сделано задание на звездочку * Реализован метод importFromCsv */ -const isStar = true; +const isStar = false; /** * Телефонная книга From f50b5e8ab572bc740f31b16e3ba7694c991bf3e2 Mon Sep 17 00:00:00 2001 From: sofelvpopel Date: Thu, 25 Oct 2018 00:28:59 +0500 Subject: [PATCH 3/5] qwe --- phone-book.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/phone-book.js b/phone-book.js index 3fe83412..1925ea1b 100644 --- a/phone-book.js +++ b/phone-book.js @@ -18,7 +18,7 @@ let phoneBook = {}; * @param {String?} email * @returns {Boolean} */ -function add(phone = '', name = '', email = '') { +function add(phone, name = '', email = '') { const validPhone = /^(\d)\1\1(\d)\2\2(\d)\3(\d)\4$/.test(phone); const contact = phoneBook[phone]; @@ -27,7 +27,7 @@ function add(phone = '', name = '', email = '') { } phoneBook[phone] = { - phone, + phone: phone.toString(), name, email }; @@ -87,19 +87,18 @@ function find(query) { } function findAll(query) { - if (!query) { + + if (!query.trim() || typeof query !== 'string') { return []; } let allContacts = Object.keys(phoneBook).map(p => phoneBook[p]); if (query !== '*') { - const regEx = new RegExp(query); - allContacts = allContacts.filter(c => - regEx.test(c.name) || - regEx.test(c.phone) || - regEx.test(c.email) + c.name.indexOf(query) !== -1 || + c.phone.indexOf(query) !== -1 || + c.emacr.indexOf(query) !== -1 ); } From f2b3b50de57014f115ed761fecf51450e3a1e567 Mon Sep 17 00:00:00 2001 From: sofelvpopel Date: Thu, 25 Oct 2018 00:31:15 +0500 Subject: [PATCH 4/5] qwe --- phone-book.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 1925ea1b..3220deae 100644 --- a/phone-book.js +++ b/phone-book.js @@ -98,7 +98,7 @@ function findAll(query) { allContacts = allContacts.filter(c => c.name.indexOf(query) !== -1 || c.phone.indexOf(query) !== -1 || - c.emacr.indexOf(query) !== -1 + c.email.indexOf(query) !== -1 ); } From 7656701cc68bbf4b0d2470567c308874c815f769 Mon Sep 17 00:00:00 2001 From: sofelvpopel Date: Thu, 25 Oct 2018 14:12:14 +0500 Subject: [PATCH 5/5] hfjdks --- phone-book.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 3220deae..d8466114 100644 --- a/phone-book.js +++ b/phone-book.js @@ -4,7 +4,7 @@ * Сделано задание на звездочку * Реализован метод importFromCsv */ -const isStar = false; +const isStar = true; /** * Телефонная книга