Recursive JS object reference help
I would like a way to accomplish the equivalent of uncommenting line 28.
by mdg583
HTML
<html>
<body>
<pre id="target"></pre>
</body>
</html>
JavaScript
person_data = {
"name": "SomeName",
"location": {
"name": "SomeLocation",
"parentLocation": {
"name": "SomeOtherLocation",
}
}
};
ValueMap = function(){
return {
type: "function",
mapFunction: x => x
}
}
ModelMap = function(model){
return {
type: "model",
model: model,
}
}
LocationMap = {
fields: {
"name": ValueMap(),
//"parentLocation": ModelMap(LocationMap),
}
}
PersonMap = {
fields: {
"name": ValueMap(),
"location": ModelMap(LocationMap),
}
}
mapValues = function(mapper, data){
let ret = {};
Object.keys(data).forEach(function(k){
if(data.hasOwnProperty(k) && mapper.fields.hasOwnProperty(k)){
let keyMap = mapper.fields[k];
let val = data[k];
if (keyMap.type == "function") {
ret[k] = keyMap.mapFunction(val);
} else if(keyMap.type == "model") {
ret[k] = mapValues(keyMap.model, val);
}
}
});
return ret;
}
let result = mapValues(PersonMap, person_data);
document.getElementById("target").innerHTML = JSON.stringify(result);