2015-06-01 10 views
5

Sono solo curioso di questo.Assegnazione di un oggetto javascript con e oggetto all'interno di un array

Diciamo che ho un array di oggetti e creo 1 oggetto, consente di assegnare un nome alla matrice di oggetti elementi e la voce di oggetto .

voglio ottenere un particolare elemento nella mia matrice di elementi utilizzando il seguente codice:

//gets an item base on ID 
function get_item(td){ 
    var item = undefined; 
    $.each(items, function(i, val) { 
     if(val.item_id == td){ 
      item = val; 
     } 
    }); 
    return item; 
} 

Il get_Item() ottiene fondamentalmente un oggetto abbinato con l'id in dotazione.

Quindi la mia domanda è questa. Cosa succede se ho cambiato le proprietà dell'oggetto modificando anche le proprietà di un oggetto ad esso associato all'interno dell'array?

Grazie mille!

+0

Potrebbe postare oggetto array campione? –

+3

mostra altro codice. Subito dopo il tuo "diciamo che ho ...", mostra il codice che pensi corrisponda a quella situazione. –

+0

ok modifico la mia domanda. – iamjc015

risposta

6

E se avessi cambiato le proprietà dell'oggetto, le proprietà di un oggetto ad esso associate sarebbero cambiate anche all'interno dell'array?

Sì.

Gli oggetti non vengono copiati. Invece, i riferimenti agli oggetti vengono passati in giro. Più semplice esempio:

var a = []; 
var b = a; 
b.push(1); 
console.log(a); // logs [1] 

Molti linguaggi di programmazione orientati agli oggetti funzionano in questo modo.

1

Puoi aggiornare la funzione per:

var data= array(); 
function get_item(propertyValue, propertyName){ 
    var retval; 
    for(var i = 0; i < data.length; i++){ 
     if(data[i][propertyName]==propertyValue){ 
      retval = data[i]; 
      break; 
     } 
    } 
    return retval; 
} 

Utilizzare lo

var item1 = get_item(1,"id"); 
var item2 = get_item("john","name"); 
+0

puoi per favore elaborare di più? – iamjc015

+0

Come risponde la domanda dell'OP? * "Che cosa succede se ho cambiato le proprietà dell'oggetto modificando anche le proprietà di un oggetto ad esso associato all'interno dell'array?" * –

+0

questo è un bene posso aggiungere dinamicamente il nome della proprietà. Grazie. – iamjc015

2

Il valore dell'oggetto all'interno della matrice cambia anche perché è un punto di riferimento. Se vuoi maggiori informazioni ti consiglio vivamente di leggere Objects and Prototypes.

Se non si desidera che cambi, è necessario utilizzare la funzione _.clone() di lodash.

Inoltre è possibile utilizzare il filtro per ottenere l'oggetto:

function get_item(td){ 
    return items.filter(function(item) { 
     return item.id === td; 
    })[0]; 
} 
+0

Questo è utile. Grazie. – iamjc015

Problemi correlati