2011-08-11 13 views
9

Mam tablicy JSON tak:Dostęp JSON lub właściwość JS używając ciąg

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

Chcę zaktualizować ten przekazując identyfikator, nazwę kolumny i nową wartość do funkcji:

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

Moje pytanie brzmi: jak zaktualizować wartość? Wiem, że mogę zrobić coś takiego:

_htaItems[x].description = 'New Value' 

Ale w mojej sprawie nazwa kolumny jest przekazywana jako ciąg znaków.

+2

Masz tablicy JavaScript, nie JSON. –

+0

możliwy duplikat [Jak użyć wartości zmiennej dla klucza innego obiektu?] (Http://stackoverflow.com/questions/2224542/how-to-use-a-variable-value-for-the-key- of-another-object) –

+1

@jagdipa Felix ma rację - nie ma tu JSON. Macie tablicę zbudowaną przy użyciu składni literalnej, która zawiera obiekty zbudowane za pomocą składni literalnej obiektu. – JAAulde

Odpowiedz

18

W JavaScript można uzyskać dostęp do właściwości obiektu albo z literalnym zapisie:

the.answer = 42; 

Albo z notacji nawias przy użyciu ciąg nazwy własności:

the["answer"] = 42; 

Te dwa stwierdzenia zrobić dokładnie to samo, ale w przypadku drugiego, ponieważ w nawiasach znajduje się ciąg znaków, może to być dowolne wyrażenie, które przekształca się w ciąg znaków (lub może być wymuszone na jeden). Tak więc wszystkie z nich zrobić to samo:

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

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

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

... co jest ustawić właściwość obiektu theanswer do 42.

Więc jeśli description w przykładzie nie może być dosłowne, bo to były przekazywane do ciebie z innego miejsca, można użyć ujęty zapis:

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

Co na elitarne wyjaśnienie! Czytałem tysiące artykułów i nie mogłem uzyskać odpowiedzi. Po prostu ocal mój dzień. Dziękuję Ci! –

+0

Piękne wyjaśnienie! Dziękuję Ci –

1

_htaItems [x] [columnName] = "Nowa wartość"; Czy źle cię zrozumiałem?

+0

+1 pokonaj mnie 3 sekundy! – JAAulde

+2

Prawdę mówiąc, prawdopodobnie czas, w którym trzeba było nacisnąć przycisk "kodowania";) – sternr

0

Trzeba użyć notacji nawiasu kwadratowego, tak jak zrobił dla indeksu tablicy:

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

Cóż, to było żenująco łatwe: D – jagdipa

0

Wystarczy zrobić _htaItems[i][columnName] = newValue;. Zmieni to właściwość określoną w columnName na newValue.

Powiązane problemy