2014-05-04 35 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