Ho passato 2 array a una funzione e voglio spostare una voce specifica da una matrice all'altra. La funzione moveDatum utilizza i metodi underscorejs per rifiutare e filtrare. Il mio problema è che gli array originali non vengono modificati, come se stessi passando gli array come valore e non come riferimento. La voce specifica viene spostata correttamente, ma come ho detto, l'effetto è solo locale. Che cosa devo cambiare, anche gli array originali cambiano?cambia array passato alla funzione
Chiamare la funzione:
this.moveDatum(sourceArr, targetArr, id)
funzione stessa:
function moveDatum(srcDS, trgDS, id) {
var ds = _(srcDS).filter(function(el) {
return el.uid === uid;
});
srcDS = _(srcDS).reject(function(el) {
return el.uid === uid;
});
trgDS.push(ds[0]);
return this;
}
Grazie per l'aiuto
Non è possibile farlo con '.filter()' o '.reject()' perché creano nuovi array. Puoi cambiare il contenuto di 'targetArr' modificando' trgDS' con 'trgDS.push (ds [0])' (come stai facendo), perché entrambi si riferiscono allo stesso array, ma non puoi causare 'sourceArr' fare riferimento a un nuovo array assegnando 'srcDS' a un nuovo array. – nnnnnn
Forse è possibile trovare questa domanda e spiegazioni utili: http://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value – Stefan
@nnnnnn Grazie, credo di aver capito ora che cosa è succedendo, in pratica faccio riferimento a srcDS al nuovo array creato con reject() e perdo il riferimento alla matrice originariamente passata che in realtà voglio cambiare, ci sarebbe un modo semplice per risolvere questo problema? – macg