通过多级字符串值获取JS对象引用

Daz*_*olt 2 javascript

我不确定是否可以通过 JavaScript 实现这样的事情,所以我在这里寻求帮助。

我有一个字符串:

var value = 'level1.level2.level3';
Run Code Online (Sandbox Code Playgroud)

我有一个对象:

var object = {
    level1 : {
        level2 : {
            level3 : 0
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用字符串值来获取对该对象的引用,而不仅仅是特定对象键的值。使用遍历函数和参考,以便可以使用它进行操作。

JSFiddle

我已经检查过,我确信这不是重复的问题,因为在重复版本中,解析函数的结果将是对象键值而不是对象键本身

Ada*_*sko 5

一班轮:

[ob].concat(value.split('.')).reduce(function(a, b) { return a[b] })
Run Code Online (Sandbox Code Playgroud)

样本:

[ob].concat(value.split('.')).reduce(function(a, b) { return a[b] })
Run Code Online (Sandbox Code Playgroud)

您不能以这种方式更改 的值,0因为它不是对象引用

如果您想影响原始对象,您需要获取level1.level2对象并更改其字段level3

ob.getValue('level1.level2').level3 = 25;
Run Code Online (Sandbox Code Playgroud)

- 这就是 JavaScript 的工作原理

但是,可以编写一个方法来设置其值

Object.prototype.getValue = function(path) {
    return [this].concat(path.split('.')).reduce(function(a, b) { return a[b] });
}

// usage:

alert((
{
    level1 : {
        level2 : {
           level3 : 0
        },
    },
}).getValue('level1.level2.level3'));
Run Code Online (Sandbox Code Playgroud)