2011-08-11 84 views
9

JS財產我有一個JSON數組是這樣的:訪問JSON或使用字符串

_htaItems = [ 
    {"ID":1, 
    "parentColumnSortID":"0", 
    "description":"Precondition", 
    "columnSortID":"1", 
    "itemType":0}, 
    {"ID":2, 
    "parentColumnSortID":"0", 
    "description":"Precondition", 
    "columnSortID":"1", 
    "itemType":0}] 

我想通過傳遞ID,列名和新價值的功能來更新這樣的:

function updateJSON(ID, columnName, newValue) 
    { 
     var i = 0; 
     for (i = 0; i < _htaItems.length; i++) 
     { 
      if (_htaItems[i].ID == ID) 
      { 
       ????? 
      } 
     } 
    } 

我的問題是,如何更新值?我知道我可以做以下事情:

_htaItems[x].description = 'New Value' 

但是在我的原因中,列名作爲字符串傳遞。

+2

你有一個JavaScript數組,而不是JSON。 –

+0

可能重複[如何使用另一個對象的密鑰的變量值?](http://stackoverflow.com/questions/2224542/how-to-use-a-variable-value-for-the-key-另一個對象) –

+1

@jagdipa Felix是對的 - 這裏沒有JSON。您有一個使用數組文字語法構建的數組,其中包含使用對象文字語法構建的對象。 – JAAulde

回答

18

在JavaScript中,您可以用文字符號訪問對象屬性

the["answer"] = 42; 

這兩個語句做準確是同樣的事情,但在第二種情況下,由於括號內的內容是一個字符串,它可以是解析爲一個字符串的任何表達式(或者可以強制爲一個)。因此,所有的這些做同樣的事情:

x = "answer"; 
the[x] = 42; 

x = "ans"; 
y = "wer"; 
the[x + y] = 42; 

function foo() { 
    return "answer"; 
} 
the[foo()] = 42; 

...這是對象theanswer屬性設置爲42

所以,如果description在你的榜樣,因爲它被傳遞給你從別的地方不能是文字,你可以用括號註釋:

s = "description"; 
_htaItems[x][s] = 'New Value'; 
+1

不適合的解釋!我讀過數千篇文章,無法得到答案。只需保存我的一天。謝謝! –

+0

美麗的解釋!謝謝 –

1

_htaItems [x] [columnName] ='New Value'; 還是我誤解了你?

+0

+1擊敗我3秒! – JAAulde

+2

爲了公平起見,可能是您按「代碼樣式」按鈕所花的時間;) – sternr

0

您需要使用方括號,就像你一樣對數組索引:

_htaItems[i][columnName] = newValue; 
+0

那麼這是一個不容易的事情:D – jagdipa

0

只是做_htaItems[i][columnName] = newValue;。它會將columnName中指定的屬性更改爲newValue

the.answer = 42; 

或者用括號符號使用字符串的屬性名稱: