如何使用格式化的字符串访问JavaScript对象中的SUB属性?

时间:2014-10-22 17:53:01

标签: javascript

为了可重复使用的代码,我试图通过使用像“foo.bar.sub”这样的字符串来访问属性来避免硬编码数千个复杂对象。

现在我已经为获取属性的值快速制定了一个天真的算法,如下所示:

getValueForPath : function(path) {
    var pathArray = path.split('.'),
        modelCopy = this;
    while (pathArray.length > 0) {
        modelCopy = modelCopy[pathArray.shift()];
    }
    return modelCopy;
},

然而,这只会返回属性的值,而不是让我设置属性的值。所以这只是问题的一半。理想情况下,我需要一种方法,对于给定的路径,返回属性本身,我不确定在JavaScript中是否可行(但我不是JavaScript专家),或者我需要一秒钟函数来设置给定路径的属性,到目前为止我无法解决这个问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果您不想使用其他功能,可以使用

getValueForPath("foo.bar").sub = something;

可替换地,

setValueForPath: function(path, val) {
    var pathArray = path.split('.'),
        modelCopy = this;
    while (pathArray.length > 1) {
        modelCopy = modelCopy[pathArray.shift()];
    }
    return modelCopy[pathArray[0]] = val;
}
getValueForPath("foo.bar.sub", something);

还要考虑统一这两个功能:

accessValueForPath: function(path, val) {
    var pathArray = path.split('.'),
        modelCopy = this,
        b = val!==void 0;
    while (pathArray.length > b) {
        modelCopy = modelCopy[pathArray.shift()];
    }
    return b ? modelCopy[pathArray[0]] = val : modelCopy;
}
accessValueForPath("foo.bar.sub"); // read
accessValueForPath("foo.bar.sub", something); // write