Skip to content
Open
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
87 changes: 85 additions & 2 deletions phone-book.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,44 +9,109 @@ 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 validEmail = /.*@.*/;
phone = String(phone);
var isValid = (phone.length === 10) && Boolean(name) && validPhone.test(phone);
isValid = isValid && phoneBook.every(elem => elem.phone !== phone);
isValid = isValid && (!(email) || validEmail.test(email));
if (!isValid) {
return false;
}
email = email ? email : '';
phoneBook.push({ phone: phone, name: name, email: email });

return true;
};

/**
* Обновление записи в телефонной книге
* @param {String} phone
* @param {String} name
* @param {String} email
* @returns {Bollean}
*/
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) || !(!(email) || validEmail.test(email))) {
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;
}
query = String(query);
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 [];
}
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);
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
Expand All @@ -57,6 +122,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 = phone.length === 10 && validPhone.test(phone) && (name);
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;
};