Задать вопрос
BRAGA96
@BRAGA96

Как получить свойство вложенных объектов передав строку?

Здравствуйте.
Очень часто нужна функция для get/set значения свойств объекта передав при этом строку вида: 'price.current.USD'
На ум пришла только одна реализация, может подскажете более простую и универсальную? (ES5!)
function stringObjectWay(methods, setting, key, value) {
	var path = [];
	for (var i = 0; i < key.split('.').length; i++) {
		path.push(key.split('.')[i]);
	}
	switch (path.length) {
		case 2:
			switch (methods) {
				case 'get':
					return setting[path[0]][path[1]];
				case 'set':
					setting[path[0]][path[1]] = value;
					break;
			}
			break;
		case 3:
			switch (methods) {
				case 'get':
					return setting[path[0]][path[1]][path[2]];
				case 'set':
					setting[path[0]][path[1]][path[2]] = value;
					break;
			}
			break;
		case 4:
			switch (methods) {
				case 'get':
					return setting[path[0]][path[1]][path[2]][path[3]];
				case 'set':
					setting[path[0]][path[1]][path[2]][path[3]] = value;
					break;	
			}
			break;
	}
}


Этот вызов функции должен вернуть: 9241.52
stringObjectWay('get', {
	price: {
		current: {
			USD: 9241.52
		}
	}
}, 'price.current.USD');


P.S без eval() или new Function()
  • Вопрос задан
  • 269 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
rockon404
@rockon404
Frontend Developer
Все уже давно реализовано и в лучшем виде.
_.get
_.set
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
const nestedVal = {
  get(path, root) {
    return path.split('.').reduce((p, c) => p[c], root);
  },
  set(path, root, val) {
    path = path.split('.');
    const key = path.pop();
    nestedVal.get(path.join('.'), root)[key] = val;
  }
};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы