2011-08-11 13 views
9

que tienen una matriz JSON como esto:JSON acceso o la propiedad JS usando cuerdas

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

Quiero actualizar esta pasando el ID, nombre de la columna y el nuevo valor a una función:

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

Mi pregunta es, ¿cómo actualizo el valor? Sé que puedo hacer algo como lo siguiente:

_htaItems[x].description = 'New Value' 

Pero en mi causa, el nombre de la columna se pasa como una cadena.

+2

tiene una matriz de JavaScript, no JSON. –

+0

posible duplicado de [¿Cómo usar un valor de variable para la clave de otro objeto?] (Http://stackoverflow.com/questions/2224542/how-to-use-a-variable-value-for-the-key- of-another-object) –

+1

@jagdipa Felix tiene razón, no hay JSON aquí. Usted tiene una matriz construida usando la sintaxis literal de la matriz que contiene objetos que se construyeron con la sintaxis literal del objeto. – JAAulde

Respuesta

18

En JavaScript, puede acceder a una propiedad de objeto, ya sea con la notación literal:

the.answer = 42; 

O con la notación entre corchetes usando una cadena para el nombre de la propiedad:

the["answer"] = 42; 

Esas dos declaraciones hacen exactamente lo mismo, pero en el caso del segundo, dado que lo que está entre paréntesis es una cadena, puede ser cualquier expresión que se resuelva en una cadena (o puede ser forzada a una). Así que todos estos hacen lo mismo:

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

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

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

... que es para establecer la propiedad del objeto answerthe a 42.

Así que si description en su ejemplo no puede ser un literal porque se está pasando a usted de algún otro lugar, puede utilizar la notación entre corchetes:

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

¡Qué na elequent explanation! Leí miles de artículos y no pude obtener LA respuesta. Solo salve mi día. ¡Gracias! –

+0

¡Hermosa explicación! Gracias –

1

_htaItems [x] [columnName] = 'Nuevo valor'; ¿O te malentendí?

+0

+1 ¡me ganó 3 segundos! – JAAulde

+2

Para ser justos, es probable que sea el momento en que te tomó presionar el botón "código de estilo";) – sternr

0

Es necesario utilizar notación de corchetes, igual que lo hizo para el índice de matriz:

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

Bueno, eso fue una vergüenza fácil: D – jagdipa

0

Sólo haz _htaItems[i][columnName] = newValue;. Cambiará la propiedad especificada en columnName a newValue.

Cuestiones relacionadas