2012-02-26 16 views
10

que tienen una estructura como la siguiente:¿Está actualizando la propiedad del objeto javascript?

skillet.person = { 
    name: { 
    first: '', 
    last: '' 
    }, 
    age: { 
    current: '' 
    }, 
    birthday: { 
    day: '', 
    month: '', 
    year: '' 
    } 
} 

Me preguntaba cómo iba a actualizar estos valores? es decir, pensé que lo siguiente era correcto

skillet.person.name.push({ first: 'blah', last: 'ha'}); 

pero está mal? Cómo puedo arreglar esto ?

+4

MDN tiene un gran tutorial JavaScript, especialmente https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects –

Respuesta

15

Si desea mezclar un objeto en otro, puede utilizar la función de extensión profunda de jQuery. "Profundo" significa que no sobrescribe name con el nuevo objeto, sino que sobrescribe las propiedades dentro de dicho objeto.

$.extend(true, skillet.person, { 
    name: { 
    first: 'updated' 
    }, 
    birthday: { 
    day: 'updated', 
    year: 'updated' 
    } 
}); 

Ahora, skillet.person tiene las propiedades adecuadas actualizados, mientras que las otras propiedades no han sido tocadas.

+0

sí! Muchas gracias :) eso es lo que estaba buscando – Andy

13
skillet.person.name.first = "blah" 
skillet.person.name.last = "ha" 

o

skillet.person.name = {first : "blah", last : "ha"} 
+0

gracias por la respuesta. ¿Existe alguna manera más rápida de actualizar en lugar de enumerar todos y cada uno de los valores si no quiero reemplazar la propiedad si no todos los valores están disponibles? – Andy

+1

@Andy: es posible que esté buscando una función 'extender'. [Ver Underscore.js para una implementación.] (Http://documentcloud.github.com/underscore/#extend) – pimvdb

+0

@pimvdb - sí, en este momento tengo un montón de propiedades, pero no todas contienen valores. Estaba reemplazando el objeto con propiedades parciales y estaba causando un problema. ¿Esto significa que debo enumerar cada valor como lo ha hecho MrE o hay un modo más rápido sin reemplazarlo? – Andy

4

push es un método de Array s que añade un nuevo elemento a una matriz.

Si desea reemplazar el valor a continuación:

skillet.person.name = { … }; 

Si desea almacenar múltiples nombres (completos) en el objeto, entonces usted tendrá la propiedad de mantener una matriz de objetos en lugar de una solo objeto.

+0

gracias ¿hay una manera más rápida de actualizar en lugar de enumerar todos y cada uno de los valores si no quiero reemplazarlos? – Andy

+2

@Andy: puede iterar sobre las propiedades del objeto. 'for (var prop en newValues) {oldValues ​​[prop] = newValues ​​[prop];}' (en un gist). MDN también tiene una buena página sobre 'for ... in'. Échale un vistazo. –

Cuestiones relacionadas