eval-вариант
//Есть такой обьект:
var obj = {
people: {
John: {
pets:{
dog:{
name:"Umbrella",
age:12
},
cat:{
name:"Kitty",
age:5
}
}
}
}
};
//И путь к его свойству, которое надо изменить на новое:
var path=['people', 'John', 'pets', 'cat', 'name'];
//Как назначить новое имя коту? Главное - этот путь может меняться, так что нужна функция, которая автоматически будет вставлять новое значение по нужному пути.
function getPropByPath (objectName, pathArray) {
var mas = pathArray.slice();
return eval( objectName + "." + mas.join(".") );
}
function setPropByPath (objectName, pathArray, newValue) {
var mas = pathArray.slice();
var last = mas.splice(-1, 1);
var prop = eval( objectName + "." + mas.join(".") );
return prop[last] = newValue;
}
console.log("intro: " + obj.people.John.pets.cat.name);
//movie
console.log ( getPropByPath("obj", path) );
console.log ( setPropByPath("obj", path, 'Train') );
console.log("end: " + obj.people.John.pets.cat.name);