2011-08-24 66 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]語法是唯一一個當你想查找的東西的名字在變量中時起作用的語法。