forked from urfu-2017/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
124 lines (94 loc) · 3.01 KB
/
phone-book.js
File metadata and controls
124 lines (94 loc) · 3.01 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
115
116
117
118
119
120
121
122
123
124
'use strict';
function validPhone(phone) {
if (phone === undefined) {
return false;
}
var validPhoneRegExp = /^[0-9]{10}$/;
return phone.toString().match(validPhoneRegExp) !== null;
}
function phoneToString(phone) {
return '+7 (' + phone.slice(0, 3) + ') ' + phone.slice(3, 6) + '-' +
phone.slice(6, 8) + '-' + phone.slice(8, 10);
}
exports.isStar = true;
var phoneBook = [];
exports.add = function (phone, name, email) {
function nameNotCorrect() {
return name === undefined || name === '';
}
if (!validPhone(phone) || nameNotCorrect() || email === '') {
return false;
}
for (var i = 0; i < phoneBook.length; i++) {
if (phoneBook[i].phone === phone) {
return false;
}
}
phoneBook.push({ 'phone': phone.toString(), 'name': name.toString(), 'email': email });
return true;
};
exports.update = function (phone, name, email) {
if (name === undefined) {
return false;
}
for (var i = 0; i < phoneBook.length; i++) {
if (phoneBook[i].phone === phone) {
phoneBook[i] = { 'phone': phone, 'name': name, 'email': email };
return true;
}
}
return false;
};
exports.findAndRemove = function (query) {
var countDeletedPhones = 0;
function findAndDeletePhoneFromPhoneBook(phoneStr) {
for (var j = 0; j < phoneBook.length; j++) {
if (phoneStr.split(', ')[1] === phoneToString(phoneBook[j].phone)) {
phoneBook.splice(j, 1);
countDeletedPhones++;
break;
}
}
}
this.find(query).forEach(findAndDeletePhoneFromPhoneBook);
return countDeletedPhones;
};
exports.find = function (query) {
var phones = [];
if (!query || typeof query !== 'string') {
return phones;
}
function filterThePhone(phone) {
function matchIsFound(property) {
return (property !== undefined && property.indexOf(query) !== -1);
}
return (query === '*' || matchIsFound(phone.name) ||
matchIsFound(phone.email) || matchIsFound(phone.phone));
}
phones = phoneBook.filter(filterThePhone).sort(function (phoneToSort) {
return phoneToSort.name;
});
for (var i = 0; i < phones.length; i++) {
var newPhone = phones[i].name + ', ' + phoneToString(phones[i].phone);
if (phones[i].email !== undefined) {
newPhone += ', ' + phones[i].email;
}
phones[i] = newPhone;
}
return phones.sort();
};
exports.importFromCsv = function (csv) {
var countAddedPhones = 0;
var lines = csv.split('\n');
for (var i = 0; i < lines.length; i++) {
var splitLines = lines[i].split(';');
var name = splitLines[0];
var phone = splitLines[1];
var email = splitLines[2];
if (!this.add(phone, name, email) && !this.update(phone, name, email)) {
countAddedPhones--;
}
countAddedPhones++;
}
return countAddedPhones;
};