如何通过将参数的名称传递给函数来设置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 :(得分: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]
语法是唯一一个在您要查找的事物的名称在变量中时有效的语法。