通过函数参数动态设置json对象的值

时间:2011-08-24 23:30:43

标签: javascript

如何通过将参数的名称传递给函数来设置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;  
}

这是可能的,还是我应该考虑以不同的方式做这件事?

2 个答案:

答案 0 :(得分:2)

使用索引器:

that.selectedFinderOptions[param] = option;  

答案 1 :(得分: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]语法是唯一一个在您要查找的事物的名称在变量中时有效的语法。