2012-05-21 16 views
8

Desidero sostituire l'intero oggetto in una matrice.Sostituzione di un elemento in un array di oggetti

http://jsfiddle.net/CWSbJ/

var array = [ {name: "name1" }, { name: "name2" } ]; 
var element = array[0]; 
element = {name: "name3"}; 
alert(array[0].name); 

In questo pezzo di codice mi aspetterei il NAME3 uscita, perché non posso sostituire un intero oggetto in un array come questo? E qual è il modo migliore per farlo?

+1

Stai solo assegna un altro valore a 'element', non' array [0] ' . –

risposta

16

Il modo corretto è

array[0] = {name: "name3"}; 

il codice esistente non funziona come previsto perché si sta assumendo una referenc * al primo elemento con

var element = array[0]; 

e poi si sono sostituendo il valore di questa variabile locale con un altro oggetto. Questo lascia l'array originale non modificato.

+0

Spiegazione leggermente errata. 'element' non è una copia, ma un * riferimento * all'oggetto memorizzato in' array [0] '. La modifica di 'element.name' influenzerebbe' array [0] .name'. – Deestan

+0

@Destan: Grazie, risolto. Non so davvero cosa stavo pensando. – Jon

+0

Penso che dovresti provare array [i] .name = "valore da assegnare", se segui array [i] = {nome: 'qualcosa'}, ogni proprietà dell'oggetto viene assegnata con solo il nome tutto sarà nullo in quello Astuccio. – Sudarshan

2

Prova questo:

var array = [ {name: "name1" }, { name: "name2" } ]; 
array[0] = {name: "name3"}; 
alert(array[0].name); 

element non è la matrice reale - è un copia della matrice

Problemi correlati