forked from urfu-2015/javascript-tasks-3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
lego.js
74 lines (66 loc) · 2.06 KB
/
lego.js
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
'use strict';
// Метод, который будет выполнять операции над коллекцией один за другим
module.exports.query = function (collection, ...funcs /* операторы через запятую */) {
funcs.forEach(function (f) {
collection = f(collection);
});
console.log(collection);
// console.log(funcs[](collection));
};
// Оператор reverse, который переворачивает коллекцию
// module.exports.reverse = function () {
// return function (collection) {
// var changedCollection = collection.reverse();
//
// // Возращаем изменённую коллекцию
// return changedCollection;
// };
// };
// Вам необходимо реализовать остальные операторы:
// select, filterIn, filterEqual, sortBy, format, limit
//Select function
module.exports.select = function (...args) {
return function (array) {
return array.map(function (el) {
var obj = {};
Object.keys(el).forEach(function (key) {
if (args.indexOf(key) !== -1) {
obj[key] = el[key];
}
});
return obj;
});
};
};
//FilterIn function
module.exports.filterIn = function (key, values) {
return function (array) {
return array.filter(function (el) {
return values.indexOf(el[key]) !== -1;
});
};
};
//SortBy function
module.exports.sortBy = function (key, order) {
return function (array) {
return array.sort(function (a, b) {
return order == 'asc' ? a[key] - b[key] : b[key] - a[key];
});
};
};
//Format function
module.exports.format = function (field, func) {
return function (array) {
return array.map(function (el) {
el[field] = func(el[field]);
return el;
});
};
};
//Limit function
module.exports.limit = function (n) {
return function (array) {
array.length = n;
return array;
};
};