2012-02-26 11 views
10

Mi hanno una struttura simile alla seguente:Aggiornamento proprietà javascript dell'oggetto?

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

mi chiedevo come avrei aggiornare questi valori? Ad esempio, io ho risposto correttamente

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

ma è sbagliato? Come posso risolvere questo?

+4

MDN ha una grande esercitazione JavaScript, specialmente https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects –

risposta

15

Se si desidera unire un oggetto in un altro, è possibile utilizzare la funzione di estensione profonda di jQuery. "Deep" significa che non sovrascrive name con il nuovo oggetto, ma sovrascrive invece le proprietà all'interno di tale oggetto.

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

Ora, skillet.person ha le proprietà appropriate aggiornati, mentre le altre proprietà sono intatte.

+0

sì! Grazie mille :) questo è quello che stavo cercando – Andy

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

o

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

grazie per la risposta. c'è un modo più rapido per aggiornare invece di elencare ogni valore se non desidero sostituire la proprietà se non tutti i valori sono disponibili? – Andy

+1

@Andy: potresti cercare una funzione 'estendi '. [Vedi Underscore.js per un'implementazione.] (Http://documentcloud.github.com/underscore/#extend) – pimvdb

+0

@pimvdb - sì, al momento ho un mucchio di proprietà ma non tutte contengono valori. Stavo sostituendo l'oggetto con le proprietà solo parziale e stava causando un prob - questo significa che devo elencare ogni valore come MrE ha fatto o c'è un modo più veloce senza sostituire? – Andy

4

push è un metodo di Array s che aggiunge un nuovo elemento di un array.

Se si desidera sostituire il valore di allora:

skillet.person.name = { … }; 

Se si desidera memorizzare più nomi (completo) nell'oggetto, allora avrete bisogno la proprietà di tenere un array di oggetti, invece di un singolo oggetto.

+0

grazie c'è un modo più veloce per aggiornare invece di elencare ogni valore se non voglio sostituire? – Andy

+2

@Andy: è possibile scorrere le proprietà dell'oggetto. 'for (var prop in newValues) {oldValues ​​[prop] = newValues ​​[prop];}' (in un gist). MDN ha anche una buona pagina su 'for ... in'. Date un'occhiata a questo. –

Problemi correlati