【问题标题】:Javascript - Access object node with variable as concatenated stringJavascript - 使用变量作为连接字符串访问对象节点
【发布时间】:2014-06-20 20:27:36
【问题描述】:

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

考虑这个对象:

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


编辑:我最初的问题并不清楚。我真正想做的是 write 到对象,而不是读取。我想将myObject.settings.some_key 的值更改为某个值,而不仅仅是访问它,就像我之前所说的那样。

【问题讨论】:

    标签: javascript string object


    【解决方案1】:

    你可以splitmodel值基于.然后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);
    

    【讨论】:

    • 嗯,这适用于获取值,但不能设置它。 currentKey 给了我节点的实际值,而不是键名,result[currentKey] 是未定义的。我试图通过声明我想要get 值来简化问题,但我真正需要做的是set 值。 编辑: result 对我来说总是与 myObject 相同。
    • @qwerty 但这是一个完全不同的问题:-)
    • 你是对的。任何指针?我正在尝试做的是将一些 JSON 数据从 localStorage 放入实际对象中。
    • @qwerty 您能否编辑您的问题以添加有关向对象添加数据的信息?
    • 当然,见编辑。除了我是在写而不是从对象中读取之外,它真的是一样的。
    猜你喜欢
    • 2018-01-24
    • 2023-03-23
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多