/
index.js
62 lines (50 loc) · 1.67 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
60
61
62
/**
* Created by daniel.irwin on 6/24/16.
*/
'use strict';
if (typeof arupex_deep_value === 'undefined' && typeof require !== 'undefined') {
global.arupex_deep_value = require('deep-value');
}
if (typeof arupex_deep_setter === 'undefined' && typeof require !== 'undefined') {
global.arupex_deep_setter = require('deep-setter');
}
function arupex_map_attack(mapOrArray, key, asArrayValue) {
let fncKey = (typeof key === 'function');
let complex = !fncKey && typeof key === 'string' && (key.indexOf('.') !== -1);
let accessor = function (element, skey) {
return element[skey];
};
let setter = function (element, key, value) {
element[key] = value;
return element;
};
if (complex) {
accessor = arupex_deep_value;
setter = arupex_deep_setter;
}
if (mapOrArray && typeof mapOrArray === 'object') {
if (Array.isArray(mapOrArray)) {
let result = {};
mapOrArray.forEach(function (element) {
let keyRef = fncKey ? key(element) : accessor(element, key);
if (asArrayValue) {
if (!result[keyRef]) {
result[keyRef] = [];
}
result[keyRef].push(element);
}
else {
result[keyRef] = element;
}
});
return result;
}
return Object.keys(mapOrArray).map(function (id) {
return setter(mapOrArray[id], fncKey ? key(mapOrArray[id]) : key, id);
});
}
return mapOrArray;
}
if (typeof module !== 'undefined') {
module.exports = arupex_map_attack;
}