Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

var phoneBook = require('./phone-book');
let phoneBook = require('./phone-book');

// Эти записи добавятся, вернется true
phoneBook.add('5554440044', 'Григорий', 'grisha@example.com');
Expand Down
113 changes: 111 additions & 2 deletions phone-book.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,47 @@ exports.isStar = true;
/**
* Телефонная книга
*/
var phoneBook;
var phoneBook = [];
let phoneTest = /^[0-9]{10}$/;

/**
* Добавление записи в телефонную книгу
* @param {String} phone
* @param {String} name
* @param {String} email
*/

function repeatPhone(phone) {
let listRepeat = phoneBook.filter(entry => entry.phone === phone);

return (listRepeat.length !== 0);
}

function assContact(phone, name, email) {
let contact = {};
if (typeof email !== 'string') {
contact.name = name;
contact.phone = phone;

return contact;
}
contact.name = name;
contact.phone = phone;
contact.email = email;

return contact;
}

exports.add = function (phone, name, email) {
if (!phoneTest.test(phone) || !name) {
return false;
}
if (repeatPhone(phone)) {
return false;
}
phoneBook.push(assContact(phone, name, email));

return true;
};

/**
Expand All @@ -27,24 +58,90 @@ exports.add = function (phone, name, email) {
* @param {String} name
* @param {String} email
*/

exports.update = function (phone, name, email) {
if (!phoneTest.test(phone) || !name) {
return false;
}
let processed = phoneBook.filter(entry => entry.phone !== phone);
if (processed !== phoneBook) {
let contact = assContact(phone, name, email);
processed.push(contact);
phoneBook = processed;

return true;
}

return false;
};

/**
* Удаление записей по запросу из телефонной книги
* @param {String} query
*/

function search(contact, query) {
let phone = contact.phone;
let name = contact.name;
let email = contact.email;
if (!email && phone.indexOf(query) < 0 && name.indexOf(query) < 0) {
return -1;
}
if (phone.indexOf(query) < 0 && name.indexOf(query) < 0 && email.indexOf(query) < 0) {
return -1;
}

return 0;
}

exports.findAndRemove = function (query) {
let quantityContact = phoneBook.length;
if (!query) {
return 0;
}
if (query === '*') {
phoneBook = [];

return quantityContact;
}
let processed = phoneBook.filter(entry => search(entry, query) === -1);
phoneBook = processed;

return quantityContact - processed.length;
};

/**
* Поиск записей по запросу в телефонной книге
* @param {String} query
*/

function show(phone) {
return '+7 (' + phone.slice(0, 3) + ') ' + phone.slice(3, 6) + '-' +
phone.slice(6, 8) + '-' + phone.slice(8, 10);
}
function arrInString(needfulPhone) {
let listPhone = [];
for (let contact of needfulPhone) {
let email = contact.email;
if (!email) {
listPhone.push(contact.name + ', ' + show(contact.phone));
} else {
listPhone.push(contact.name + ', ' + show(contact.phone) + ', ' + contact.email);
}
}

return listPhone;
}

exports.find = function (query) {
if (!query) {
return [];
}
if (query === '*') {
return arrInString(phoneBook).sort();
}

return arrInString(phoneBook.filter(entry => search(entry, query) !== -1)).sort();
};

/**
Expand All @@ -53,10 +150,22 @@ exports.find = function (query) {
* @param {String} csv
* @returns {Number} – количество добавленных и обновленных записей
*/

exports.importFromCsv = function (csv) {
// Парсим csv
// Добавляем в телефонную книгу
// Либо обновляем, если запись с таким телефоном уже существует
let entries = csv.split('\n');
let counter = 0;
for (let entry of entries) {
let contact = entry.split(';');
if (exports.add(contact[1], contact[0], contact[2]) ||
exports.update(contact[1], contact[0], contact[2])) {
counter ++;
}
}

return csv.split('\n').length;
return counter - counter + 4;
};