Przepuszczam 2 tablice do funkcji i chcę przenieść konkretny wpis z jednej tablicy do drugiej. Funkcja moveDatum sama używa metod underscorejs do odrzucania i filtrowania. Mój problem polega na tym, że oryginalne tablice nie są zmieniane, tak jakbym przekazywał tablice jako wartość, a nie jako odniesienie. Określony wpis został poprawnie przeniesiony, ale jak już powiedziałem, efekt jest tylko lokalny. Co muszę zmienić, aby zmienić oryginalne tablice?tablica zmian przekazana do funkcji
Wywołać funkcję:
this.moveDatum(sourceArr, targetArr, id)
Funkcja sama:
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;
}
Dzięki za pomoc
Nie można tego zrobić za pomocą '.filter()' lub '.reject()', ponieważ tworzą one nowe tablice. Możesz zmienić zawartość 'targetArr', modyfikując' trgDS' za pomocą 'trgDS.push (ds [0])' (tak jak robisz), ponieważ oba odnoszą się do tej samej tablicy, ale nie możesz wywołać 'sourceArr' odnosić się do nowej tablicy przez przypisanie 'srcDS' do nowej tablicy. – nnnnnn
Może znajdziesz to pytanie i wyjaśnienia przydatne: http://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value – Stefan
@nnnnnn Dzięki, myślę, że rozumiem, co jest teraz kontynuując, zasadniczo odwołuję się do srcDS do nowej tablicy utworzonej za pomocą reject() i tracę odniesienie do pierwotnie przekazanej tablicy, którą naprawdę chcę zmienić, czy istnieje prosty sposób na naprawienie tego? – macg