2014-05-04 36 views
2

是否可以使用变量中的节点路径访问对象节点?Javascript - 带有变量的连接字符串的访问对象节点

考虑这个对象:

var myObject = { 
    settings: { 
     some_key : 'some value' 
     some_other_key : 'some value' 
    } 
}; 

,我已经得到了这个字符串:

var model = 'settings.some_key'; 

有了这些数据,我想要得到的myObject.settings.some_key值。

如果这只是在变单一的“节点”(例如settings,我可以myObject[model]访问它,但是当我需要去多层次到对象(第一settings那么我就不能拿到工作some_key


编辑:我在我最初的问题不清楚什么我真正想要做的是的对象,没有看过我想的myObject.settings.some_key值更改为东西,不是。只是访问它,正如我以前所说的。

回答

4

可以split基于.model值,然后reduce分割阵列,这样

console.log('settings.some_key'.split(".").reduce(function(result, currentKey) { 
    return result[currentKey]; 
}, myObject)); 
# some value 

要设置的值,你可以做这样的事情

var dataToBeSet = "some other value;" 

'settings.some_key'.split(".").reduce(function(result, currentKey, index, array) { 
    if (index === array.length - 1) { 
     result[currentKey] = dataToBeSet; 
    } 
    return result[currentKey]; 
}, myObject); 

console.log(myObject); 
+0

嗯,这个作品获取价值,但不设置它。 'currentKey'给了我节点的实际值,而不是键名,并且'result [currentKey]'是未定义的。我试图通过说明我想要*值*来简化问题,但我实际需要做的是*设置*值。 *编辑:*'result'对我来说总是和'myObject'一样。 – qwerty

+0

@qwerty但这是一个完全不同的问题:-) – thefourtheye

+0

你说得对。任何指针?我想要做的是从localStorage中放入一些JSON数据到实际的对象中。 – qwerty