我们说我有一个字符串:'first.second.last'
我也有一个对象:
{
'first': {
'second' : {
'last': "value"
}
}
}
如何使用该字符串访问"value"
?
答案 0 :(得分:2)
像这样......
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
答案 1 :(得分:1)
这不是一个数组,它是一个对象。如果您想访问该对象中的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]
})
在最后,值将具有您想要的输出。有人可能现在是一个简单的工具或库,它可以完全实现这一点,或者更实用的方法来应用这种方法,遗憾的是,此时并没有想到任何更聪明的东西。
答案 2 :(得分:0)
您可以访问类似于使用[]表示法的数组的对象。如果您将字符串拆分为它,您可以转到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;