Генерация названий объектов - конкатенация названий объектов
Добрый день!
Есть необходимость обращаться к нужному свойству объекта исходля из параметров которые поступили из "вне" - для этого я хотел использовать конкатенацию. Например: // Параметры из "вне" 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, время: 09:46. |