Показать сообщение отдельно
  #4 (permalink)  
Старый 20.11.2014, 02:53
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

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);
Ответить с цитированием