Kopier array efter værdi

Når du kopierer et array i JavaScript til et andet array:

var arr1 = ['a','b','c'];
var arr2 = arr1;
arr2.push('d');  //Now, arr1 = ['a','b','c','d']

Jeg indså, at arr2 refererer til det samme array som arr1, snarere end til et nyt, uafhængigt array. Hvordan kan jeg kopiere arrayet for at få to uafhængige arrays?

Løsning

Brug dette:

var newArray = oldArray.slice();

Grundlæggende klonerer slice() operationen arrayet og returnerer en reference til et nyt array.

Bemærk også, at:

For referencer, strenge og tal (og ikke det faktiske objekt) kopierer slice() objektreferencer til det nye array. Både det oprindelige og det nye array refererer til det samme objekt. Hvis et objekt med reference ændres, er ændringerne synlige for både det nye og det oprindelige array.

Primitives som strenge og tal er uforanderlige, så ændringer i strengen eller tallet er umulige.

Kommentarer (10)

Der er ikke brug for jQuery... [Arbejdseksempel][1]

var arr2 = arr1.slice()

Dette kopierer arrayet fra startpositionen 0 til slutningen af arrayet.

Det er vigtigt at bemærke, at det vil fungere som forventet for primitive typer (streng, tal osv.), og også for at forklare den forventede opførsel for referencetyper...

Hvis du har et array af referencetyper, f.eks. af typen Object. Arrayet vil blive kopieret, men begge arrays vil indeholde referencer til de samme Object's. Så i dette tilfælde ser det ud som om arrayet kopieres som reference, selv om arrayet faktisk kopieres.

Kommentarer (3)

Hvis du vil lave en ny kopi af et objekt eller et array, skal du f.eks. eksplicit kopiere objektets egenskaber eller arrayets elementer:

var arr1 = ['a','b','c'];
var arr2 = [];

for (var i=0; i < arr1.length; i++) {
   arr2[i] = arr1[i];
}

Du kan søge efter flere oplysninger på Google om uforanderlige primitive værdier og foranderlige objektreferencer.

Kommentarer (1)