diff --git a/index.js b/index.js index 370cebb5..cd7331c0 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,4 @@ 'use strict'; - const phoneBook = require('./phone-book'); // Эти записи добавятся, вернется `true` @@ -16,10 +15,12 @@ phoneBook.add('5555550055'); // Обновление ранее добавленных записей phoneBook.update('5551110011', 'Алексей', 'alex@example.com'); phoneBook.update('5553330033', 'Валерий'); +phoneBook.update('5553330033'); // В следующих примерах вернутся все записи console.info(phoneBook.find('*')); console.info(phoneBook.find('555')); +console.info(phoneBook.find('Григорий')); // В обоих случаях вывод будет следующий // [ // 'Алексей, +7 (555) 111-00-11, alex@example.com', diff --git a/phone-book.js b/phone-book.js index 891d7c01..72ed552b 100644 --- a/phone-book.js +++ b/phone-book.js @@ -4,12 +4,14 @@ * Сделано задание на звездочку * Реализован метод importFromCsv */ -const isStar = true; +const isStar = false; /** * Телефонная книга */ -let phoneBook; +let phoneBook = []; +let phoneNotes = []; +let noteEmail = ''; /** * Добавление записи в телефонную книгу @@ -19,7 +21,23 @@ let phoneBook; * @returns {Boolean} */ function add(phone, name, email) { + let isNoteNew = true; + phoneBook.forEach(function (note) { + if (note.name === name || note.phone === phone) { + isNoteNew = false; + } + }); + if (name !== undefined && isNoteNew && phone.length === 10 && !isNaN(phone)) { + let newName = {}; + newName.name = name; + newName.phone = phone; + newName.email = email; + phoneBook.push(newName); + return (true); + } + + return (false); } /** @@ -30,7 +48,18 @@ function add(phone, name, email) { * @returns {Boolean} */ function update(phone, name, email) { + let isUpdated = false; + for (let i = 0; i < phoneBook.length; i++) { + if (phoneBook[i].phone === phone && name !== undefined) { + phoneBook[i].name = name; + phoneBook[i].email = email; + isUpdated = true; + + return (isUpdated); + } + } + return (isUpdated); } /** @@ -39,7 +68,15 @@ function update(phone, name, email) { * @returns {Number} */ function findAndRemove(query) { + let deletedNotesCount = 0; + for (let i = 0; i < phoneBook.length; i++) { + if (isNoteFound(query, i)) { + phoneNotes.splice(i, 1); + deletedNotesCount++; + } + } + return deletedNotesCount; } /** @@ -48,7 +85,36 @@ function findAndRemove(query) { * @returns {String[]} */ function find(query) { + phoneNotes = []; + if (query.length === 0 || query === undefined) { + + return; + } + for (let i = 0; i < phoneBook.length; i++) { + if (isNoteFound(query, i)) { + phoneNotes.push(phoneBook[i].name + ', +7 (' + phoneBook[i].phone.substr(0, 3) + ') ' + + phoneBook[i].phone.substr(3, 3) + '-' + phoneBook[i].phone.substr(6, 2) + '-' + + phoneBook[i].phone.substr(8, 2) + noteEmail); + } + } + + return phoneNotes.sort(); +} + +function isNoteFound(query, i) { + noteEmail = ''; + if (phoneBook[i].email === undefined) { + noteEmail = ''; + } else { + noteEmail = ', ' + phoneBook[i].email; + } + if (phoneBook[i].name.indexOf(query) >= 0 || phoneBook[i].phone.indexOf(query) >= 0 || + noteEmail.indexOf(query) >= 0 || query === '*') { + + return true; + } + return false; } /**