Når du kopierer en matrise i JavaScript til en annen matrise:
var arr1 = ['a','b','c'];
var arr2 = arr1;
arr2.push('d'); //Now, arr1 = ['a','b','c','d']
Jeg innså at arr2
refererer til den samme matrisen som arr1
, i stedet for en ny, uavhengig matrise. Hvordan kan jeg kopiere matrisen for å få to uavhengige matriser?
Bruk dette:
var newArray = oldArray.slice();
I utgangspunktet kloner operasjonen slice()
matrisen og returnerer en referanse til en ny matrise.
For referanser, strenger og tall (og ikke det faktiske objektet) kopierer slice()
objektreferanser til det nye arrayet. Både det opprinnelige og det nye arrayet refererer til det samme objektet. Hvis et referert objekt endres, er endringene synlige for både det nye og det opprinnelige arrayet.
Primitiver som strenger og tall er uforanderlige, så endringer i strengen eller tallet er umulig.
Ingen jQuery nødvendig... [Arbeidseksempel][1]
var arr2 = arr1.slice()
Dette kopierer matrisen fra startposisjonen 0
til slutten av matrisen.
Det er viktig å merke seg at det vil fungere som forventet for primitive typer (streng, tall osv.), og å også forklare den forventede oppførselen for referansetyper ...
Hvis du har en matrise med referansetyper, for eksempel av typen Object
. Matrisen vil bli kopiert, men begge matrisene vil inneholde referanser til de samme Objekt
ene. Så i dette tilfellet vil det virke som om matrisen er kopiert med referanse selv om matrisen faktisk er kopiert..
Hvis du vil lage en ny kopi av et objekt eller en matrise, må du for eksempel eksplisitt kopiere egenskapene til objektet eller elementene i matrisen:
var arr1 = ['a','b','c'];
var arr2 = [];
for (var i=0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
Du kan søke etter mer informasjon på Google om uforanderlige primitive verdier og foranderlige objektreferanser.