forked from urfu-2016/javascript-task-2
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathphone-book.js
More file actions
114 lines (92 loc) · 2.65 KB
/
phone-book.js
File metadata and controls
114 lines (92 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
'use strict';
exports.isStar = false;
var phoneBook = [];
function isPhone(phone) {
return (phone.match(/^[0-9]{10}$/) === null || phone === '' ||
isNaN(Number(phone)) || phone.length !== 10);
}
// Добавление записи в телефонную книгу
exports.add = function (phone, name, email) {
function isName() {
return name === '' || typeof name !== 'string';
}
if (isName() || isPhone(phone)) {
return false;
}
for (var i = 0; i < phoneBook.length; i++) {
if (phoneBook[i].phone === phone) {
return false;
}
}
phoneBook.push({ phone: phone, name: name, email: email });
return true;
};
// Обновление записи в телефонной книге
exports.update = function (phone, name, email) {
var found = false;
if (name === '' || typeof name !== 'string' ||
isPhone(phone)) {
return false;
}
phoneBook.forEach(function (elem) {
if (typeof elem !== undefined && elem.phone === phone) {
elem.email = email;
elem.name = name;
found = true;
}
});
return found;
};
// Перечень функций
function formatedQ(q) {
if (q === '*') {
return '';
}
if (q === '') {
return false;
}
return q;
}
function isRequest(q, request) {
for (var i in request) {
if (request[i] && request[i].indexOf(q) !== -1) {
return true;
}
}
return false;
}
// Отформатированный номер телефона
function phoneFormat(phone) {
return '+7 (' + phone.slice(0, 3) + ') ' + phone.slice(3, 6) + '-' +
phone.slice(6, 8) + '-' + phone.slice(8, 10);
}
function joinNote(request) {
var result = [request.name, phoneFormat(request.phone)];
if (request.email) {
result.push(request.email);
}
return result.join(', ');
}
// Поиск записей по запросу в телефонной книге
exports.find = function (q) {
q = formatedQ(q);
function existRequest(item) {
return isRequest(q, item);
}
function getNote(item) {
return joinNote(item);
}
return phoneBook.filter(existRequest).map(getNote)
.sort();
};
// Удаление записей по запросу из телефонной книги
exports.findAndRemove = function (q) {
function nonExistRequest(item) {
return !isRequest(q, item);
}
q = formatedQ(q);
var beforeChange = phoneBook.length;
phoneBook = phoneBook.filter(nonExistRequest);
var afterChange = phoneBook.length;
return beforeChange - afterChange;
};