-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
59 lines (51 loc) · 1.38 KB
/
index.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
const initVal = function (_initVal) {
this._initVal = _initVal;
return this;
};
function shouldEnd(length, idx, till) {
return till && length >= till
? idx >= till
: idx >= length
};
function _recurEach(src, value, opr, idx, incr, till) {
return src.length === 0 || shouldEnd(src.length, idx, till)
? value
: _recurEach(src, opr(src[idx], value, idx, src), opr, idx + incr, incr, till);
};
function recurEach(src, idx = 0, incr = 1, till) {
return {
initVal,
opr: function (opr) {
return _recurEach(src, this._initVal, opr, idx, incr, till);
}
};
};
function _recurTill(till, value, opr, idx, incr) {
return till === 0 || idx >= till
? value
: _recurTill(till, opr(idx, value, till), opr, idx + incr, incr);
};
function recurTill(till, idx = 0, incr = 1) {
return {
initVal,
opr: function (opr) {
return _recurTill(till, this._initVal, opr, idx, incr);
}
};
};
function _recurWhile(con, value, opr) {
return !con(value)
? value
: _recurWhile(con, opr(value), opr);
}
function recurWhile(con) {
return {
initVal,
opr: function (opr) {
return _recurWhile(con, this._initVal, opr);
}
};
};
exports.recurEach = recurEach;
exports.recurTill = recurTill;
exports.recurWhile = recurWhile;