JS对象中的变量

时间:2015-03-03 10:19:08

标签: javascript angularjs

我有一个JSON对象

{scope:{results:{...}}}

我有一个名为

的字符串
"data.one.url"

现在我想在JSON对象中设置值。通常我会这样做:

scope.results.data.one.url = "hello";

但是当我只有上面提到的字符串时怎么办呢?

3 个答案:

答案 0 :(得分:1)

这是数据结构:

myData = {scope:{results:{data:{one:{url:"The url"}}}}}

定义基础。您的字符串访问路径与此相关:

var base = myData.scope.results;

以及通过路径访问的功能:

function getIn(base, path) {
  var components = path.split(".");
  var current = base;
  for (var i = 0; i < components.length; i++) {
    current = current[components[i]];
  }

  return current;
}

使用它:

getIn(base, "data.one.url")
>>> "The url"

或者相对于根:

getIn(myData, "scope.results.data.one.url")
>>> "The url"

当然需要更多的错误处理,以使其对您不期望的路径具有鲁棒性。

答案 1 :(得分:1)

在这种情况下最简单和最方便的方法(因为您使用的是AngularJS)是使用$parse服务:

var str = 'data.one.url';
var url = $parse('results.' + str)($scope); // "hello"

演示: http://plnkr.co/edit/NYLvWc1gOA5X3glIM1gI?p=preview

Angular在内部使用$parse服务来完成这类事情。当您使用HTML {{someobj.prop.name}}撰写时,在someobj.prop.name服务的帮助下,字符$scope将被$parse解释。如果你愿意,你可以自己使用它是非常酷的。只需确保将服务注入您的控制器。

答案 2 :(得分:-2)

这个怎么样(如果我搞定的话)?

var myJSON = {scope:{results:{...}}}
myJSON["scope"]["results"]["url"] = data.one.url
myJSON = JSON.Stringify(myJSON);

然后你将这个对象作为JSON: &#34; {范围:{结果:{URL {值}}}}&#34;