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
68 changes: 66 additions & 2 deletions phone-book.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,42 +9,94 @@ 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 phoneRe = new RegExp('^[0-9]{10}$');
if (!phoneRe.test(phone) || typeof(name) === 'undefined' || phone in phoneBook) {
return false;
}
phoneBook[phone] = { 'name': name, 'email': email };

return true;
};

/**
* Обновление записи в телефонной книге
* @param {String} phone
* @param {String} name
* @param {String} email
* @returns {boolean}
*/
exports.update = function (phone, name, email) {
if (typeof(phone) === 'undefined' || typeof(email) === 'undefined') {
return false;
} else if (typeof(name) === 'undefined') {
phoneBook[phone]['email'] = email;
} else {
phoneBook[phone]['email'] = email;
phoneBook[phone]['name'] = name;
}

return true;
};

/**
* Удаление записей по запросу из телефонной книги
* @param {String} query
* @returns {Integer}
*/
exports.findAndRemove = function (query) {
var count = 0;
for (var phone in phoneBook) {
if (query === '*' || phone.match(query) || phoneBook[phone]['email'].match(query) ||
phoneBook[phone]['name'].match(query)) {
delete phoneBook[phone];
count++;
}
}

return count;
};

function contactToString(phone) {
var name = phoneBook[phone]['name'];
var phone1 = phone.slice(0, 3);
var phone2 = phone.slice(3, 6);
var phone3 = phone.slice(6, 8);
var phone4 = phone.slice(8);
var email = phoneBook[phone]['email'];
var res = name + ' 7 (' + phone1 + ' ) ' + phone2 + '-' + phone3 + '-' + phone4 + ' ' + email;

return res;
}

/**
* Поиск записей по запросу в телефонной книге
* @param {String} query
* @returns {String}
*/
exports.find = function (query) {
var result = [];
for (var phone in phoneBook) {
if (typeof(query) === 'undefined' || query === '') {
break;
}
if (query === '*' || phone.match(query) || phoneBook[phone]['email'].match(query) ||
phoneBook[phone]['name'].match(query)) {
result.push(contactToString(phone));
}
}
var newRes = result.sort().join('\n');

return newRes;
};

/**
Expand All @@ -58,5 +110,17 @@ exports.importFromCsv = function (csv) {
// Добавляем в телефонную книгу
// Либо обновляем, если запись с таким телефоном уже существует

return csv.split('\n').length;
var lines = csv.split('\n');
var count = 0;
for (var i in lines) {
var record = lines[i].split(';');
if (record[1] in phoneBook) {
exports.update(record[1], record[0], record[2]);
} else {
exports.add(record[1], record[0], record[2]);
}
count++;
}

return count;
};