-1

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

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

我希望这会导致:

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

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

4

3 回答 3

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]];
        }
    }
}
于 2013-09-03T12:30:57.913 回答
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")。

于 2013-09-03T12:30:50.680 回答
-1

您可以通过 Dot(.) 简单地访问另一个对象内的对象

因此,在您的情况下,您在引号中指定表达式。你可以试试这个

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

同样,如果您有更多嵌套对象。

于 2013-09-03T12:21:24.253 回答