-
Notifications
You must be signed in to change notification settings - Fork 249
/
object-util.mjs
40 lines (34 loc) · 992 Bytes
/
object-util.mjs
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
/* eslint-disable security/detect-object-injection */
export function get(pObject, pPath, pDefault) {
if (!pObject || !pPath) {
return pDefault;
}
// Regex explained: https://regexr.com/58j0k
const lPathArray = pPath.match(/([^[.\]])+/g);
const lReturnValue = lPathArray.reduce((pPreviousObject, pKey) => {
return pPreviousObject && pPreviousObject[pKey];
}, pObject);
if (!lReturnValue) {
return pDefault;
}
return lReturnValue;
}
export function set(pObject, pPath, pValue) {
const lPathArray = pPath.match(/([^[.\]])+/g);
lPathArray.reduce((pPreviousObject, pKey, pIndex) => {
if (pIndex === lPathArray.length - 1) {
pPreviousObject[pKey] = pValue;
} else if (!pPreviousObject[pKey]) {
pPreviousObject[pKey] = {};
}
return pPreviousObject[pKey];
}, pObject);
}
/**
* @param {any} pObject
* @param {string} pPath
* @returns {boolean}
*/
export function has(pObject, pPath) {
return Boolean(get(pObject, pPath));
}