JavaScript:使用变量访问对象多级属性

时间:2014-06-14 16:08:43

标签: javascript

如果我使用变量作为密钥,如何访问多级属性?

这不起作用:

var obj = {
    first: {thirst: "yo"},
    second: {beckon: "dud"}
}
var key = "first.thirst";
var result = obj[key];

3 个答案:

答案 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;}

这可行吗