Javascript -访问对象节点与变量作为连接字符串

Javascript - Access object node with variable as concatenated string

本文关键字:连接 字符串 变量 访问 对象 节点 Javascript      更新时间:2023-09-26

是否可以使用变量中的节点路径访问对象节点?

考虑这个对象:

var myObject = {
    settings: {
        some_key : 'some value'
        some_other_key : 'some value'
    }
};

我得到了这个字符串:

var model = 'settings.some_key';

有了这些数据,我想得到myObject.settings.some_key的值。

如果它只是变量中的单个"节点"(例如settings),我可以用myObject[model]访问它,但是当我需要进入对象的多个级别时(首先是settings然后是some_key),我无法获得工作。


编辑:我最初的问题不清楚。我实际上想做的是写入到对象,而不是读取。我想改变myObject.settings.some_key的值,而不仅仅是访问它,正如我之前所说的。

您可以根据.model的值设置为split,然后将拆分数组设置为reduce,如下所示

console.log('settings.some_key'.split(".").reduce(function(result, currentKey) {
    return result[currentKey];
}, myObject));
# some value

要设置该值,可以这样做

var dataToBeSet = "some other value;"
'settings.some_key'.split(".").reduce(function(result, currentKey, index, array) {
    if (index === array.length - 1) {
        result[currentKey] = dataToBeSet;
    }
    return result[currentKey];
}, myObject);
console.log(myObject);