I stumbled upon the following code:
obj = {}; // global object
function set(path, value) {
var schema = obj; // a moving reference to internal objects within obj
var pList = path.split('.');
var len = pList.length;
for(var i = 0; i < len-1; i++) {
var elem = pList[i];
if( !schema[elem] ) schema[elem] = {}
schema = schema[elem];
}
schema[pList[len-1]] = value;
}
set('mongo.db.user', 'root');
I read a bit further on it and found that schema
is acting as a pointer of obj
. How does this work? I even re-wrote the above code to incorporate ES6:
console.log(set('mongo.db.user', 'root'));
function set(path, data = '', obj = {}, delim = '.') {
if (path) {;
path.split(delim).reduce((s, n, i, a) => {
s.pointer[n] = s.pointer[n] || i === a.length - 1 ? data : {};
s.pointer = s.pointer[n];
return s;
}, {pointer: obj});
}
return obj;
}
However I feel limited in my ability to expand upon this because I do not see how, for example, if pointer
is obj
, how does setting s.pointer[n]
set object, but s.pointer = s.pointer[n]
not set/overwrite obj
?
If someone could please explain this that would be great - also if I am missing something from the bigger picture (and thus didn't ask) please let me know.