比方說,我有一個字符串:'first.second.last'
使用字符串來訪問多維對象?
我也有一個對象:使用字符串
{
'first': {
'second' : {
'last': "value"
}
}
}
如何訪問"value"
?
比方說,我有一個字符串:'first.second.last'
使用字符串來訪問多維對象?
我也有一個對象:使用字符串
{
'first': {
'second' : {
'last': "value"
}
}
}
如何訪問"value"
?
事情是這樣的......
var o = {
'first': {
'second' : {
'last': "value"
}
}
};
var s = 'first.second.last';
var val = s.split('.').reduce(function(p, c) {
return p.hasOwnProperty(c) && p[c] || p;
}, o);
這就會鑽到你的對象,並找到相匹配的最深的關鍵。相反,如果你想返回null
任何未能匹配項,將reduce
回調
function(p, c) {
return p && p.hasOwnProperty(c) && p[c] || null;
}
如果您需要爲Array.prototype.reduce
傳統支持,請參閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Polyfill
優秀。這正是我所期待的。 –
這將返回意外的結果,該字符串與對象中的路徑不匹配。 –
@FelixKling這是一個自頂向下的搜索。它會返回最匹配的值(我在答案中提到)。我想它可以簡單地返回null,但OP需要澄清他們的需求 – Phil
這不是一個數組,它是一個對象。如果您要訪問last
在該對象中,如果有與內容的變量命名爲example
:
example['first']['second']['third']
如果你想有一個動態的設置,其中你不知道的深度嘗試類似:
var myString = 'first.second.last'
var myObj = {
'first': {
'second' : {
'last': "value"
}
}
}
myString.split('.').forEach(function(item) {
myObj = myObj[item]
})
最終值會有你想要的輸出。有人現在可能會有一個簡單的實用程序或庫來完成這個工作,或者更實用的方法來應用這種方法,但遺憾的是現在並沒有更聰明的想法。
您可以訪問類似於對象數組使用[]符號。如果分割字符串到它,你可以去sample["first"]["second"]["third"]
因此,這應該工作,我認爲:
var sample = {
'first': {
'second' : {
'last': "value"
}
}
}
var str = "first.second.last";
var current = sample;
str.split('.').forEach(function(prop) {
current = current[prop];
})
return current;
是啊,對不起。有時候我不會使用正確的單詞。 –