Генерация названий объектов - конкатенация названий объектов
Добрый день!
Есть необходимость обращаться к нужному свойству объекта исходля из параметров которые поступили из "вне" - для этого я хотел использовать конкатенацию. Например: // Параметры из "вне" var params = 'header.slogan'; // Конкатенирую params с остальной частью объекта this.props. + params // В итоге получаю объект из которого могу вытянуть данные this.props.header.slogan но так не работает. Подскажите пожалуйста как такое можно сделать? |
smegol,
делать из params массив и идти циклом. |
Что-то типа этого нужно было сделать?
var a={ prop:'first', first:'Its first property', first_second:'Its second property', first_second_noFantasy:'Its true' }, property_name='_second'; alert(a[a.prop+property_name]); |
C вложенным объектом у меня не получилось - выдаёт undefined
var param = '.header.slogan'; this[this.props + param]; |
smegol,
пост №2, других решений нет |
Цитата:
Или я не правильно понял идею? var param = ['.header.slogan']; this.props + param; |
smegol,
param = param.split(".") |
var a={ first:{ first:'root->first->second' }, second:'root->second' }, property_name='first.first'; function get_object_property(object,property){ if(typeof object!=='object') throw new Error('Invalid input data'); property=property.split('.'); for(var i in property){ if(!property.hasOwnProperty(i)) continue; var pr_name=property[i]; if(object[pr_name]) object=object[pr_name]; else return null; }; return object; } alert(get_object_property(a,property_name)); |
smegol,
var params = 'header.slogan', obj = {props: {header : {slogan : "всякая фигня"}}}; function fun(obj,params) { return params.split(".").reduce(function(ob, key) { return ob[key] },obj) } alert(fun(obj.props , params)); |
Первый раз увидел метод "reduce", мне стыдно)
|
Часовой пояс GMT +3, время: 06:56. |