如何更新嵌套对象中的var

时间:2013-09-03 12:18:25

标签: javascript

假设我有一个对象,我想设置一个深嵌套在这个对象中的变量,但var还不存在。最好的方法是什么?例如,如果我有一个字符串,显示要更新的变量应该在哪里,如下所示。

var myObject = {};
var location = "myObject.test.myVar";
var value = "My value!";
setValue(location, value, myObject);

我希望这会导致:

myObject = {
    test: {
        myVar: "My value!"
    }
};

位置可能比那更深。 任何帮助表示赞赏! 谢谢! 安德烈亚斯

3 个答案:

答案 0 :(得分:2)

此功能可以满足你的需要 请注意,它通过引用更改对象 注意它忽略了名字,因为它是对象本身。

function setValue(location, value, object)
{
    var path = location.split(".");
    var current = object;
    for (var i = 1; i < path.length; i++)
    {
        if ((i + 1) == path.length)
            current[path[i]] = value;
        else
        {
            current[path[i]] = {};
            current = current[path[i]];
        }
    }
}

答案 1 :(得分:1)

var myObject = {};
var location = "test.my.deep.hidden.nested.myVar";
var otherLoc = "test.my.deep.secret.var";
var value = "My value!";

function setValue(location, value, obj){
  var i, prev = obj, curr;
  location = location.split(".");
  for(i = 0; i < location.length - 1; ++i){
    curr = prev[location[i]];
    if("object" !== typeof curr){
      prev[location[i]] = {}
      curr = prev[location[i]];
    }
    prev = curr;
  }
  curr[location[i]] = value;
}

setValue(location, value, myObject);
setValue(otherLoc, 42, myObject);

console.log(JSON.stringify(myObject));

结果:

{
  "test": {
    "my": {
      "deep": {
        "hidden": {
          "nested": {
            "myVar": "My value!"
          }
        },
        "secret": {
          "var":42
        }
      }
    }
  }
}

请注意,您可能需要添加一些功能,例如检查位置是否实际有效("this.is..invalid")。

答案 2 :(得分:-1)

您可以通过Dot(。)

简单地访问另一个对象内的对象

因此,在您的情况下,您使用引号指定表达式。你可以尝试一下

var location = myObject.test.myVar; //Without quotes

同样如果你有更多的嵌套对象。