Здравствуйте.
Очень часто нужна функция для 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()