-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
41 lines (31 loc) · 912 Bytes
/
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
const MaptorConsumer = {}
, MC = MaptorConsumer;
MC.map = (obj, maptor) => {
if(typeof maptor === 'function') {
return maptor(obj);
}
if(obj.constructor === Array && maptor.constructor === Array) {
return obj.map((item) => MC.map(item, maptor[0]));
}
const newObj = {};
for(let prop in maptor) {
const maptorProp = maptor[prop]
, objProp = obj[prop];
if(typeof maptorProp === 'string') {
newObj[prop] = obj[maptorProp];
} else if(typeof maptorProp === 'number') {
if(maptorProp === 1) {
newObj[prop] = objProp;
}
} else if(typeof objProp === 'object' && typeof maptorProp === 'object') {
newObj[prop] = MC.map(obj[prop], maptor[prop])
} else {
const newProp = maptorProp(objProp, prop);
if(newProp !== undefined) {
newObj[prop] = newProp;
}
}
}
return newObj;
}
module.exports = MC;