如何在javascript中将包含点的字符串转换为属性访问器?

如何在javascript中将包含点的字符串转换为属性访问器?,javascript,object-literal,Javascript,Object Literal,例如,如果我有一个字符串: var foo = 'a.b.c'; 。。。和目标: var bar = { a: { b: { c: null } } } 如何使用字符串将“c”的值设置为“Hello World!”!“?这里有一种不那么简单或一致的方法 var bar = { a: { b: { c: 'tes

例如,如果我有一个字符串:

    var foo = 'a.b.c';
。。。和目标:

    var bar = {
        a: {
            b: {
               c: null
            }
         }
    }

如何使用字符串将“c”的值设置为“Hello World!”!“?

这里有一种不那么简单或一致的方法

var bar = {
    a: {
        b: {
            c: 'test'
        }
    }
}

var foo = 'a.b.c',
    arr = foo.split('.'),
    o = bar;

arr.forEach(function(key, i) {
    if (i === arr.length-1) {
        o[key] = 'Hello World'
    }else{
        o = o[key];
    }
});

另一种可能的解决方案是使用eval,但它不安全,而且大多不鼓励使用:

var foo = "a.b.c";

    var bar = {
        a: {
            b: {
               c: null
            }
         }
    }

eval("bar." + foo + " = 'Hello World'; ");
alert(bar.a.b.c);

另一个小函数()示例:

函数setVal(对象、存取器、val){
var parts=accessors.split('.');
对于(变量i=0;i
还要获取值,请执行以下操作:

function getVal(obj, accessors) {
    var parts = accessors.split('.');

    for(var i = 0; i < parts.length; i++) {
        obj = obj[parts[i]] 
    }

    return obj;
}

var val = getVal(bar, foo);
函数getVal(obj,访问器){
var parts=accessors.split('.');
对于(变量i=0;i
你不能,至少不能以一种简单一致的方式,所以你应该重新考虑这种方法。
function getVal(obj, accessors) {
    var parts = accessors.split('.');

    for(var i = 0; i < parts.length; i++) {
        obj = obj[parts[i]] 
    }

    return obj;
}

var val = getVal(bar, foo);