From e752420f6518fd89ee04c7af95f22d13010b595d Mon Sep 17 00:00:00 2001 From: Petrov012110 Date: Thu, 29 Jul 2021 21:23:32 +0500 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=8F=D1=82=D0=B5=D1=80=D0=BA=D0=B0=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=20=D0=BF=D0=BE=20JS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/task_1/index.js | 47 ++++++++++++++++++++++++++++++++-------- src/task_2/index.js | 23 ++++++++++++++++++++ src/task_3/index.js | 49 ++++++++++++++++++++++++++++++++++++++++++ src/task_4/index.js | 32 +++++++++++++++++++++++++++- src/task_5/index.js | 52 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 193 insertions(+), 10 deletions(-) diff --git a/src/task_1/index.js b/src/task_1/index.js index 966f6fc..0662965 100644 --- a/src/task_1/index.js +++ b/src/task_1/index.js @@ -1,25 +1,54 @@ /** Задача 1 - Функция add Требуется написать функцию add, которая принимает: - 1) Текущее состояние телефонной книги - 2) Номер телефон - 3) Имя - 4) Электронную почту, + 1) Текущее состояние телефонной книги + 2) Номер телефон + 3) Имя + 4) Электронную почту, требуется: в текущее состояние телефонной книги добавить новый контакт по правилам - 1) Телефоны принимаются только в форматах +7-999-111-22-33 или +79991112233 - 2) Не добавляется уже существующая запись - 3) Не добавляется запись без имени + 1) Телефоны принимаются только в форматах +7-999-111-22-33 или +79991112233 + 2) Не добавляется уже существующая запись + 3) Не добавляется запись без имени возвращает: - true - если добавление прошло успешно - false - если запись не создалась или не добавилась в книгу + true - если добавление прошло успешно + false - если запись не создалась или не добавилась в книгу @param {Array<{ phone: string, name: string, email?: string }>} phoneBook - Текущее состояние телефонной книги @param {string} phone Номер телефона @param {string} name Имя @param {string} email Электронная почта @returns {boolean} Результат добавления */ + +const regexPhoneNumber = /^\+7[\- ](\d{3}[\- ])(\d{3}[\- ])(\d{2}[\- ])(\d{2})$/im; +const regexp = /^\+7[0-9]{10}$/im; + function add(phoneBook, phone, name, email) { + let obj = new Object(); + obj.name = name; + obj.phone = phone; + if (email) { + obj.email = email; + } + if (regexPhone(phone) && name) { + let result = phoneBook.find(el => el.phone.replace(/[^\d]/g, '') == phone.replace(/[^\d]/g, '')); + if (!result) { + phoneBook.push(obj); + return true; + } else { + return false; + } + } else { + return false; + } +} + +function regexPhone(str) { + if (str.match(regexp) || str.match(regexPhoneNumber)) { + return true; + } else { + return false; + } } module.exports.add = add; diff --git a/src/task_2/index.js b/src/task_2/index.js index a5ad6b9..08bb003 100644 --- a/src/task_2/index.js +++ b/src/task_2/index.js @@ -18,7 +18,30 @@ @param {string} email Электронная почта @returns {boolean} Результат обновления */ +const regexPhoneNumber = /^\+7[\- ](\d{3}[\- ])(\d{3}[\- ])(\d{2}[\- ])(\d{2})$/im; +const regexp = /^\+7[0-9]{10}$/im; + function update(phoneBook, phone, name, email) { + if (regexPhone(phone) && name) { + let result = phoneBook.find(item => item.phone.replace(/[^\d]/g, '') == phone.replace(/[^\d]/g, '')); + if (result) { + if (result.email !== email || result.name !== name) { + result.email = email; + result.name = name; + return true; + } + } else if (result == undefined) { + return false + } + } else { + return false; + } +} + +function regexPhone(str) { + if (str.match(regexp) || str.match(regexPhoneNumber)) { + return true; + } } module.exports.update = update; diff --git a/src/task_3/index.js b/src/task_3/index.js index 67fd3cf..f229f3d 100644 --- a/src/task_3/index.js +++ b/src/task_3/index.js @@ -18,7 +18,56 @@ @param {string} query Строка для поиска @returns {Array} Результаты поиска */ + function find(phoneBook, query) { + if (query !== "*" && query !== "") { + let regexpQuery = new RegExp('(' + query.replace(/[\-+]/g, '') + '[\w\n]*)', 'i'); + return findAllMatchedObjectInBook(phoneBook, regexpQuery).map((item) => { + return createStrFromObj(item); + }) + } else if (query === "") { + false; + } else { + return phoneBook.map((item) => { + return createStrFromObj(item); + }) + } +} + +function modifyPhone(phone) { + phone = phone.replace(/-/g, '') + let lenPhone = phone.length; + let tt = phone.split(''); + if (lenPhone == 12) { + tt.splice(2, "", " ("); + tt.splice(6, "", ") "); + tt.splice(10, "", "-"); + tt.splice(13, "", "-"); + } + return tt.join('') +} + +const findAllMatchedObjectInBook = (book, reg) => { + return book.filter(function (item) { + for (let key in item) { + let res = item[key].replace(/-/g, ''); + if (reg.test(res)) { + return item + } + } + }) +} + +const createStrFromObj = (i) => { + let str = ""; + for (let key in i) { + if (key == "phone") { + str += modifyPhone(i[key]) + ' '; + } else { + str += i[key] + ' '; + } + } + return str.replace(/\s+$/, ''); } module.exports.find = find; diff --git a/src/task_4/index.js b/src/task_4/index.js index c769ecd..f5768e2 100644 --- a/src/task_4/index.js +++ b/src/task_4/index.js @@ -13,6 +13,36 @@ @returns {number} Количество удаленных записей */ function findAndRemove(phoneBook, query) { -} + + if (query !== "*" && query !== "") { + let regex = new RegExp('(' + query.replace(/[\-+]/g, '') + '[\w\n]*)', 'i'); + let newArr = findAllMatchedItemsInBook(phoneBook, regex).map((item) => { + return phoneBook.forEach((element, i) => { + if (element == item) { + phoneBook.splice(i, 1); + } + }); + }); + + return newArr.length; + + } else if (query == "*") { + let lengthPhoneBook = phoneBook.length; + phoneBook.splice(0, phoneBook.length); + + return lengthPhoneBook; + } + } + + const findAllMatchedItemsInBook = (book, reg) => { + return book.filter(function (item) { + for (let key in item) { + let res = item[key].replace(/-/g, ''); + if (reg.test(res)) { + return item; + } + } + }); + } module.exports.findAndRemove = findAndRemove; diff --git a/src/task_5/index.js b/src/task_5/index.js index a775bd0..b4ec5b6 100644 --- a/src/task_5/index.js +++ b/src/task_5/index.js @@ -11,7 +11,59 @@ @param {string} csv Csv строка, описывающая таблицу, формата name;phone;email @returns {number} Количество добавленных и обновленных записей */ +const regexPhoneNumber = /^\+7[\- ](\d{3}[\- ])(\d{3}[\- ])(\d{2}[\- ])(\d{2})$/im; +const regexp = /^\+7[0-9]{10}$/im; + function importFromCsv(phoneBook, csv) { + + let counter = 0; + let arr = csv.split("\n"); + let csvArray = strToArrays(arr).map(el => { + if (el.length <= 3) { + return { + name: el[1], + phone: el[0], + email: el[2] + } + } + }); + + const repeatArray = csvArray.filter(item1 => phoneBook.some(item2 => item1.phone.replace(/-/g, '') === item2.phone.replace(/-/g, ''))); + + const uniqArray = csvArray.filter(e => phoneBook.findIndex(i => i.phone.replace(/-/g, '') == e.phone.replace(/-/g, '')) === -1); + + uniqArray.forEach(item => { + if (regexPhone(item.phone) && item.name != undefined) { + if (item.email == undefined) { + delete item.email; + phoneBook.push(item); + counter++; + } else { + phoneBook.push(item); + counter++; + } + } + }); + + repeatArray.forEach(item1 => { + let obj = phoneBook.find(item2 => item2.phone.replace(/-/g, '') == item1.phone.replace(/-/g, '')) + obj.email = item1.email; + obj.name = item1.name; + counter++; + }); + + return counter; + +} + +const strToArrays = (arr) => { + return arr.map(item => item.replace(/;/g, ' ').split(" ")); +} + +function regexPhone(str) { + if (str.match(regexp) || str.match(regexPhoneNumber)) { + return true; + } } module.exports.importFromCsv = importFromCsv;