在Javascript中将字符串转换为多维变量名称

时间:2017-08-30 03:43:23

标签: javascript variables object properties

我有一个JavaScript对象,定义如下

function MyObject () {

    this.x = 10;

    this.foo = {
        x: 20
    };

    this.bar = {
        baz: {
            x: 30
        }
    }
}

我使用上述对象如下:

var n = new MyObject();

在我的代码中的某个时刻,我需要通过字符串引用上述对象的属性。这是一个例子

var s1 = 'x';
var result1 = n[s1]; // Works. result1 = 10.

var s2 = 'foo.x';
var result2 = n[s2] // Does not work, result2 = undefined. Was hoping result2 = 20.

var s3 = 'bar.baz.x';
var result3 = n[s3] // Does not work, result 3 = undefined. Was hoping result3 = 30.

正如您在上面的示例中所看到的,result2result3将是undefined,这正是我的期望,但不是我希望会发生的事情。我需要一种方法将字符串s2s3转换为以下

var result2 = n['foo']['x'];
var result3 = n['bar']['baz']['x'];

请注意,我将s2s3字符串拆分为数组变量。

一种方法是执行以下操作

var s2 = 'foo.x';
var s2Array = s2.split('.');
var result2 = n[s2Array[0]][s2Array[1]];

但我不认为这种方法非常可行,因为我不确定字符串变量将是多少(例如,foo.xbar.baz.x),以及我也想要一个适用于任何级别的通用解决方案(例如,解决方案也应该工作qux.quux.quuz.corge.grault.garply.waldo.x)。

感谢。

0 个答案:

没有答案