Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.11.2014, 23:18
Интересующийся
Отправить личное сообщение для Sektoid Посмотреть профиль Найти все сообщения от Sektoid
 
Регистрация: 02.08.2012
Сообщений: 12

Как изменить свойство обьекта, зная к нему путь?
//Есть такой обьект:

var obj = {
  people: {
    John: {
      pets:{
        dog:{
          name:"Umbrella",
          age:12
        },
        cat:{
          name:"Kitty",
          age:5
        }
      }
    }
  }
};

//И путь к его свойству, которое надо изменить на новое:

var path=['people', 'John', 'pets', 'cat', 'name'];
var newName='Train';

//Как назначить новое имя коту? Главное - этот путь может меняться, так что нужна функция, которая автоматически будет вставлять новое значение по нужному пути.
Ответить с цитированием
  #2 (permalink)  
Старый 19.11.2014, 23:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Sektoid,
Движение по массиву с помощью другого массива.
Ответить с цитированием
  #3 (permalink)  
Старый 20.11.2014, 01:46
Интересующийся
Отправить личное сообщение для Sektoid Посмотреть профиль Найти все сообщения от Sektoid
 
Регистрация: 02.08.2012
Сообщений: 12

Спасибо огромное! Все работает!
Ответить с цитированием
  #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);
Ответить с цитированием
  #5 (permalink)  
Старый 20.11.2014, 03:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

bes,
eval( objectName + "['" + mas.join("']['") +"']");
Ответить с цитированием
  #6 (permalink)  
Старый 21.11.2014, 19:40
Интересующийся
Отправить личное сообщение для Sektoid Посмотреть профиль Найти все сообщения от Sektoid
 
Регистрация: 02.08.2012
Сообщений: 12

Тоже неплохо, даже проще) Спасибо)
Ответить с цитированием
  #7 (permalink)  
Старый 21.11.2014, 19:42
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Sektoid
Тоже неплохо, даже проще) Спасибо)
короткий код не всегда лучше
Ответить с цитированием
  #8 (permalink)  
Старый 21.11.2014, 20:16
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Но чаще всего.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как изменить цвет и размер шрифта в Java savas332 Серверные языки и технологии 3 09.01.2014 17:02
Как изменить адресную строку и изменить историю переходов vuler Общие вопросы Javascript 4 20.03.2012 14:14
Получение значения поля объекта зная путь к полю и сам объект mgvmax Общие вопросы Javascript 11 07.03.2012 19:09
Как изменить скрипт, что бы им его можно было использовать для нужной страницы Nick50_70 Общие вопросы Javascript 0 28.04.2009 23:30