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
133 lines (110 loc) · 3 KB
/
phone-book.js
File metadata and controls
133 lines (110 loc) · 3 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
125
126
127
128
129
130
131
132
133
'use strict';
exports.isStar = true;
var phoneBook = {};
exports.add = function (phone, name, email) {
if (!checkName(name) || !checkPhone(phone)) {
return false;
}
phoneBook[phone] = {};
phoneBook[phone].name = name;
phoneBook[phone].email = email;
return true;
};
function checkPhone(phone) {
var regExp = new RegExp('\\d{10}');
if (!regExp.test(phone) || phoneBook.hasOwnProperty(phone) || phone.length > 10) {
return false;
}
return true;
}
function checkName(name) {
if (name === '' || name === undefined || typeof name !== 'string') {
return false;
}
return true;
}
exports.update = function (phone, name, email) {
if (!checkName(name) || !phoneBook.hasOwnProperty(phone)) {
return false;
}
phoneBook[phone].name = name;
phoneBook[phone].email = email;
return true;
};
exports.findAndRemove = function (query) {
let count = Object.keys(phoneBook).length;
if (query === '') {
return 0;
} else if (query === '*') {
query = '';
}
let arrayOfRecords = findRecords(query);
for (let record of arrayOfRecords) {
delete phoneBook[record[1]];
}
return count - Object.keys(phoneBook).length;
};
exports.find = function (query) {
let result = [];
if (query === '') {
return [];
} else if (query === '*') {
result = findRecords('');
} else {
result = findRecords(query);
}
sortByFirstItem(result);
for (let data of result) {
data[1] = formatPhone(data[1]);
result[result.indexOf(data)] = data.join(', ');
}
return result;
};
function findRecords(query) {
let array = [];
for (let phone in phoneBook) {
if (phoneBook.hasOwnProperty(phone)) {
checkOccurrences(query, phone, array);
}
}
return array;
}
function checkOccurrences(query, phone, array) {
if (phone.indexOf(query) !== -1 ||
phoneBook[phone].name.indexOf(query) !== -1 ||
(phoneBook[phone].email !== undefined && phoneBook[phone].email.indexOf(query) !== -1)) {
if (phoneBook[phone].email !== undefined) {
array.push([phoneBook[phone].name, phone, phoneBook[phone].email]);
} else {
array.push([phoneBook[phone].name, phone]);
}
}
}
function sortByFirstItem(array) {
array.sort(function (a, b) {
if (a[0] > b[0]) {
return 1;
} else if (a[0] < b[0]) {
return -1;
}
return 0;
});
}
function formatPhone(phone) {
phone = phone.split('');
phone.splice(0, 0, '+7 (');
phone.splice(4, 0, ') ');
phone.splice(8, 0, '-');
phone.splice(11, 0, '-');
return phone.join('');
}
exports.importFromCsv = function (csv) {
let count = 0;
let data = csv.split('\n');
for (let contact of data) {
let info = contact.split(';');
count += exports.add(info[1], info[0], info[2]) ||
exports.update(info[1], info[0], info[2]);
}
return count;
};