如果我使用变量作为密钥,如何访问多级属性?
这不起作用:
var obj = {
first: {thirst: "yo"},
second: {beckon: "dud"}
}
var key = "first.thirst";
var result = obj[key];
答案 0 :(得分:12)
在JavaScript中使用字符串作为属性名称时,没有禁止使用的字符:包括句点。所以你可以轻松拥有这样的对象属性:
var o = {
'first.second.third': 'value';
}
鉴于此,显然无法实施您的解决方案。
但是,只要您不在商标命名中使用句点,就可以创建一个执行此操作的函数:
function resolve(obj, path){
path = path.split('.');
var current = obj;
while(path.length) {
if(typeof current !== 'object') return undefined;
current = current[path.shift()];
}
return current;
}
然后你可以打电话:
var key = "first.thirst";
var result = resolve(obj, key);
答案 1 :(得分:2)
你可以遍历树,就像@RobW所说:
var traverse = function (obj, keys) {
return keys.split('.').reduce(function (cur, key) {
return cur[key];
}, obj);
};
var obj = {
first: { thirst: 'yo' },
second: { beckon: 'dud' }
};
var keys = 'first.thirst';
console.log(traverse(obj, keys));
答案 2 :(得分:1)
function getMultiLevelProp(obj, key){
if(typeof obj == "object"){
var keyQueue = key.split(".").reverse();
var tempVal = obj, currentKey;
while((currentKey = keyQueue.pop()) != undefined)
tempVal = tempVal[currentKey];
return tempVal;
}
return false;}
这可行吗