2011-08-24 93 views
0

如何通过将名称通过参数传递给函数来设置json对象中项目的值?通过函数参数动态设置json对象的值

如:

this.loadStates = function() { 
    that.setStateIfExists('inStock', true); 
} 

this.setStateIfExists = function (param, option) { 
    // i'd like this to be 'that.selectedFinderOptions.inStock = option' 
    that.selectedFinderOptions.param = option; 
} 

这甚至可能还是我应该考虑不同要这样做?

+0

如果您有JSON,则需要对其进行反序列化,在结果对象上设置属性,然后将其重新转换为JSON。 (除非你打算把它全部当作字符串处理。)你真的是指“对象”而不是“JSON对象”吗? – nnnnnn

回答

2

使用一个索引:

that.selectedFinderOptions[param] = option; 
2

您使用短语“JSON对象”有我们有点困惑。 JSON是一个或多个javascript对象序列化的扁平化字符串表示形式。所以,你不会用一块JSON动态地做任何事情。这只是一个字符串。

如果你的意思是你有一个javascript对象,那么我们可以讨论选项。对于一个JavaScript对象,你有几个选择。首先,你可以使用该对象的属性,并有它的价值体现你想要什么:

var myObj = {}; 
myObj.inStock = true; 

之后,任何人都可以访问myObj.inStock并获得该属性的当前值。

如果你想要的是通过函数来​​计算instock的值,而不是静态分配给对象,并且希望代码适用于所有浏览器,那么您将不得不改变访问方式即通过方法调用:

var myObj = {}; 
myObj.getInStockValue = function() { 
    // execute whatever code you want here to 
    // compute the desired value and return it when done 
}; 

然后,任何人都可以通过myObj.getInStockValue()访问它。

在你的具体的例子,你可以改变这一点:

this.setStateIfExists = function (param, option) { 
    // i'd like this to be 'that.selectedFinderOptions.inStock = option' 
    that.selectedFinderOptions.param = option; 
} 

这样:

this.setStateIfExists = function (param, option) { 
    // i'd like this to be 'that.selectedFinderOptions.inStock = option' 
    that.selectedFinderOptions[param] = option; 
} 

当参数是动态的,并包含在一个变量,使用[param]语法代替.param语法。他们都在逻辑上做同样的事情,但[param]语法是唯一一个当你想查找的东西的名字在变量中时起作用的语法。