-
Notifications
You must be signed in to change notification settings - Fork 0
/
playground.js
105 lines (86 loc) · 3.45 KB
/
playground.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
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
((global) => {
const _wrap = (fn, cb) => {
setTimeout(() => {
cb(fn());
}, Math.random() * 20);
};
const AsyncArray = function (initial) {
if (initial && !(initial instanceof Array)) {
throw new Error('initial value is not an array');
}
const a = initial ? Array.from(initial) : [];
this.set = (index, value, cb) => _wrap(() => {
a[index] = value
}, cb);
this.push = (value, cb) => _wrap(() => {
a.push(value)
}, cb);
this.get = (index, cb) => _wrap(() => a[index], cb);
this.pop = (cb) => _wrap(() => a.pop(), cb);
this.length = (cb) => _wrap(() => a.length, cb);
this.print = () => {
console.log('a to string',a.toString());
};
}
const add = (a, b, cb) => _wrap(() => a + b, cb);
const subtract = (a, b, cb) => _wrap(() => a - b, cb);
const multiply = (a, b, cb) => _wrap(() => a * b, cb);
const divide = (a, b, cb) => _wrap(() => a / b, cb);
const less = (a, b, cb) => _wrap(() => a < b, cb);
const equal = (a, b, cb) => _wrap(() => a == b, cb);
const lessOrEqual = (a, b, cb) => _wrap(() => a <= b, cb);
global.Homework = {
AsyncArray,
add,
subtract,
multiply,
divide,
less,
equal,
lessOrEqual,
};
Object.freeze(global.Homework);
})(typeof window === 'undefined' ? global : window);
// a.push(4, () => {
// console.log('добавление элемента выполнено');
// a.print();
//
// a.set(2, 999, () => {
// console.log('присваивание элемента по индексу выполнено');
// a.print();
//
// a.get(0, (result) => {
// console.log('получение элемента по индексу выполнено, результат', result);
// a.print();
//
// a.pop((result) => {
// console.log('получение последнего элемента выполнено, результат', result);
// a.print();
//
// a.length((result) => {
// console.log('получение длины массива выполнено, результат', result);
// a.print();
// });
// });
// });
// });
// });
// add(5, 2, (result) => console.log('результат сложения', result));
//
// subtract(11, 7, (result) => console.log('результат вычитания', result));
//
// multiply(6, 7, (result) => console.log('результат умножения', result));
//
// divide(13, 7, (result) => console.log('результат деления', result));
//
// less(5, 3, (result) => console.log('результат операции МЕНЬШЕ', result));
//
// equal(1, 1, (result) => console.log('результат операции РАВНО', result));
//
// lessOrEqual(12, 19, (result) => console.log('результат операции МЕНЬШЕ ИЛИ РАВНО', result));
const {AsyncArray, add, subtract, multiply, divide, less, equal, lessOrEqual} = Homework;
const asyncArray = new Homework.AsyncArray([1, 2, 3, 4]);
const reducerSum = (acc, curr, i, src, cb) => Homework.add(acc, curr, cb);
const myReduce = require("./solution/index")(Homework)
myReduce(asyncArray, reducerSum, 0, (res) => { console.log('solution',res); // 10
});