I have nested objects, for example:
var a = {b: {c: {d: 1}}};
and a dynamic key:
var field = "b.c.d"
I need to change a value at object a
by key b.c.d
. Nesting level of object and key can vary.
The only thing which works for me is:
eval("a."+field+"=2"); -> it means a.b.c.d = 2;
But it's ugly. Is there a better way?
You can try following using a recursive function
var a = {b: {c: {d: 1}}};
var field = "b.c.d";
var value = 2;
function updateObject(obj, key, val){
if(obj) {
if(key.includes(".")) {
var keys = key.split(".");
updateObject(obj[keys.shift()], keys.join("."), val);
} else if (obj.hasOwnProperty(key)) obj[key] = val;
}
}
updateObject(a, field, value);
console.log(a);