|
06.05.2017, 19:16
|
Аспирант
|
|
Регистрация: 28.05.2015
Сообщений: 40
|
|
Генерация названий объектов - конкатенация названий объектов
Добрый день!
Есть необходимость обращаться к нужному свойству объекта исходля из параметров которые поступили из "вне" - для этого я хотел использовать конкатенацию.
Например:
// Параметры из "вне"
var params = 'header.slogan';
// Конкатенирую params с остальной частью объекта
this.props. + params
// В итоге получаю объект из которого могу вытянуть данные
this.props.header.slogan
но так не работает.
Подскажите пожалуйста как такое можно сделать?
|
|
06.05.2017, 19:32
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,129
|
|
smegol,
делать из params массив и идти циклом.
|
|
06.05.2017, 19:39
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,797
|
|
Что-то типа этого нужно было сделать?
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]);
|
|
06.05.2017, 20:15
|
Аспирант
|
|
Регистрация: 28.05.2015
Сообщений: 40
|
|
C вложенным объектом у меня не получилось - выдаёт undefined
var param = '.header.slogan';
this[this.props + param];
|
|
06.05.2017, 20:18
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,129
|
|
smegol,
пост №2, других решений нет
|
|
06.05.2017, 20:20
|
Аспирант
|
|
Регистрация: 28.05.2015
Сообщений: 40
|
|
Сообщение от рони
|
smegol,
делать из params массив и идти циклом.
|
Такой вариант выдаёт [object Object].header.slogan
Или я не правильно понял идею?
var param = ['.header.slogan'];
this.props + param;
|
|
06.05.2017, 20:22
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,129
|
|
smegol,
param = param.split(".")
|
|
06.05.2017, 20:25
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,797
|
|
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));
Последний раз редактировалось Nexus, 06.05.2017 в 20:28.
|
|
06.05.2017, 20:29
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,129
|
|
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));
|
|
06.05.2017, 20:37
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,797
|
|
Первый раз увидел метод "reduce", мне стыдно)
|
|
|
|