Array.prototype.copyWithin()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

Die copyWithin()-Methode von Array-Instanzen kopiert seicht einen Teil dieses Arrays an eine andere Position im gleichen Array und gibt dieses Array zurück, ohne dessen Länge zu ändern.

Probieren Sie es aus

const array1 = ["a", "b", "c", "d", "e"];

// Copy to index 0 the element at index 3
console.log(array1.copyWithin(0, 3, 4));
// Expected output: Array ["d", "b", "c", "d", "e"]

// Copy to index 1 all elements from index 3 to the end
console.log(array1.copyWithin(1, 3));
// Expected output: Array ["d", "d", "e", "d", "e"]

Syntax

js
copyWithin(target, start)
copyWithin(target, start, end)

Parameter

target

Index (nullbasiert), an dem die Sequenz kopiert werden soll, konvertiert zu einer Ganzzahl. Dieser Index gibt an, wo das Element von start kopiert wird, und alle Elemente zwischen start und end werden in aufeinanderfolgende Indizes kopiert.

  • Ein negativer Index zählt vom Ende des Arrays zurück — wenn -array.length <= target < 0, wird target + array.length verwendet.
  • Wenn target < -array.length, wird 0 verwendet.
  • Wenn target >= array.length, wird nichts kopiert.
  • Wenn target nach der Normalisierung hinter start positioniert ist, wird nur bis zum Ende von array.length kopiert (mit anderen Worten, copyWithin() erweitert das Array niemals).
start

Index (nullbasiert), an dem mit dem Kopieren von Elementen begonnen wird, konvertiert zu einer Ganzzahl.

  • Ein negativer Index zählt vom Ende des Arrays zurück — wenn -array.length <= start < 0, wird start + array.length verwendet.
  • Wenn start < -array.length, wird 0 verwendet.
  • Wenn start >= array.length, wird nichts kopiert.
end Optional

Index (nullbasiert), an dem das Kopieren von Elementen endet, konvertiert zu einer Ganzzahl. copyWithin() kopiert bis, aber nicht einschließlich end.

  • Ein negativer Index zählt vom Ende des Arrays zurück — wenn -array.length <= end < 0, wird end + array.length verwendet.
  • Wenn end < -array.length, wird 0 verwendet.
  • Wenn end >= array.length oder end nicht angegeben ist, wird array.length verwendet, wodurch alle Elemente bis zum Ende kopiert werden.
  • Wenn end eine Position angibt, die vor oder an der von start angegebenen Position liegt, wird nichts kopiert.

Rückgabewert

Das modifizierte Array.

Beschreibung

Die Methode copyWithin() arbeitet ähnlich wie memmove in C und C++ und ist eine hochleistungsfähige Methode, um die Daten eines Array zu verschieben. Dies gilt besonders für die TypedArray-Methode gleichen Namens. Die Sequenz wird als eine Operation kopiert und eingefügt; die eingefügte Sequenz hat die kopierten Werte, selbst wenn sich die Bereiche für Kopieren und Einfügen überlappen.

Da undefined bei der Konvertierung zu einer Ganzzahl 0 wird, hat das Weglassen des Parameters start denselben Effekt wie das Übergeben von 0. Dies kopiert das gesamte Array an die Zielposition, was einer Rechtsverschiebung entspricht, bei der die rechte Grenze abgeschnitten und die linke Grenze dupliziert wird. Dieses Verhalten kann für Leser Ihres Codes verwirrend sein, daher sollten Sie 0 explizit als start übergeben.

js
console.log([1, 2, 3, 4, 5].copyWithin(2));
// [1, 2, 1, 2, 3]; move all elements to the right by 2 positions

Die Methode copyWithin() ist eine mutierende Methode. Sie ändert nicht die Länge des Arrays this, aber sie verändert den Inhalt von this und erstellt neue Eigenschaften oder entfernt bestehende, falls erforderlich.

Die Methode copyWithin() bewahrt leere Stellen. Falls der zu kopierende Bereich lückenhaft ist, werden die entsprechenden neuen Indizes der leeren Stellen gelöscht und ebenfalls zu leeren Stellen.

Die Methode copyWithin() ist generisch. Sie erwartet lediglich, dass der this-Wert eine length-Eigenschaft und ganzzahlige Schlüssel-Eigenschaften hat. Obwohl Strings ebenfalls array-ähnlich sind, ist diese Methode nicht geeignet, um auf ihnen angewendet zu werden, da Strings unveränderlich sind.

Beispiele

Verwendung von copyWithin()

js
console.log([1, 2, 3, 4, 5].copyWithin(0, 3));
// [4, 5, 3, 4, 5]

console.log([1, 2, 3, 4, 5].copyWithin(0, 3, 4));
// [4, 2, 3, 4, 5]

console.log([1, 2, 3, 4, 5].copyWithin(-2, -3, -1));
// [1, 2, 3, 3, 4]

Verwendung von copyWithin() auf lückenhaften Arrays

copyWithin() propagiert leere Stellen.

js
console.log([1, , 3].copyWithin(2, 1, 2)); // [1, empty, empty]

Aufrufen von copyWithin() auf Nicht-Array-Objekten

Die Methode copyWithin() liest die Eigenschaft length von this und manipuliert die beteiligten ganzzahligen Indizes.

js
const arrayLike = {
  length: 5,
  3: 1,
};
console.log(Array.prototype.copyWithin.call(arrayLike, 0, 3));
// { '0': 1, '3': 1, length: 5 }
console.log(Array.prototype.copyWithin.call(arrayLike, 3, 1));
// { '0': 1, length: 5 }
// The '3' property is deleted because the copied source is an empty slot

Spezifikationen

Specification
ECMAScript® 2025 Language Specification
# sec-array.prototype.copywithin

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
copyWithin

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch