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 oberflächlich einen Teil dieses Arrays an eine andere Stelle im selben Array und gibt dieses Array ohne Änderung seiner Länge zurück.
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
copyWithin(target, start)
copyWithin(target, start, end)
Parameter
target
-
Nullbasierter Index, an dem die Sequenz hin kopiert werden soll, in eine Ganzzahl konvertiert. Dies entspricht dem Ort, an den das Element bei
start
kopiert wird, und alle Elemente zwischenstart
undend
werden an nachfolgende Indizes kopiert.- Ein negativer Index zählt vom Ende des Arrays zurück — wenn
-array.length <= target < 0
, wirdtarget + array.length
verwendet. - Wenn
target < -array.length
, wird0
verwendet. - Wenn
target >= array.length
, wird nichts kopiert. - Wenn
target
nach der Normalisierung hinterstart
positioniert ist, erfolgt das Kopieren nur bis zum Ende vonarray.length
(mit anderen Worten,copyWithin()
erweitert das Array niemals).
- Ein negativer Index zählt vom Ende des Arrays zurück — wenn
start
-
Nullbasierter Index, ab dem Elemente kopiert werden sollen, in eine Ganzzahl konvertiert.
- Ein negativer Index zählt vom Ende des Arrays zurück — wenn
-array.length <= start < 0
, wirdstart + array.length
verwendet. - Wenn
start < -array.length
, wird0
verwendet. - Wenn
start >= array.length
, wird nichts kopiert.
- Ein negativer Index zählt vom Ende des Arrays zurück — wenn
end
Optional-
Nullbasierter Index, bis zu dem Elemente kopiert werden sollen, in eine Ganzzahl konvertiert.
copyWithin()
kopiert bis, aber nicht einschließlichend
.- Ein negativer Index zählt vom Ende des Arrays zurück — wenn
-array.length <= end < 0
, wirdend + array.length
verwendet. - Wenn
end < -array.length
, wird0
verwendet. - Wenn
end >= array.length
oderend
weggelassen wird, wirdarray.length
verwendet, wodurch alle Elemente bis zum Ende kopiert werden. - Wenn
end
eine Position vor oder an der Position impliziert, diestart
impliziert, wird nichts kopiert.
- Ein negativer Index zählt vom Ende des Arrays zurück — wenn
Rückgabewert
Das modifizierte Array.
Beschreibung
Die copyWithin()
-Methode funktioniert wie C und C++'s memmove
und ist eine leistungsstarke Methode, um die Daten eines Array
zu verschieben. Dies gilt insbesondere für die TypedArray
-Methode gleichen Namens. Die Sequenz wird als eine Operation kopiert und eingefügt; die eingefügte Sequenz wird die kopierten Werte haben, auch wenn sich die Kopier- und Einfügeregion überlappen.
Da undefined
zu 0
wird, wenn es in eine Ganzzahl konvertiert wird, hat das Weglassen des start
-Parameters die gleiche Wirkung wie das Übergeben von 0
, was das gesamte Array an die Zielposition kopiert, was einem Rechtsschieben entspricht, bei dem die rechte Grenze abgeschnitten wird und die linke Grenze dupliziert wird. Dieses Verhalten kann Leser Ihres Codes verwirren, daher sollten Sie 0
ausdrücklich als start
übergeben.
console.log([1, 2, 3, 4, 5].copyWithin(2));
// [1, 2, 1, 2, 3]; move all elements to the right by 2 positions
Die copyWithin()
-Methode ist eine mutierende Methode. Sie verändert nicht die Länge von this
, aber sie wird den Inhalt von this
ändern und neue Eigenschaften erstellen oder vorhandene Eigenschaften löschen, falls erforderlich.
Die copyWithin()
-Methode bewahrt leere Slots. Wenn der Bereich, aus dem kopiert werden soll, spärlich ist, werden die entsprechenden neuen Indizes der leeren Slots gelöscht und werden auch zu leeren Slots.
Die copyWithin()
-Methode ist generisch. Sie erwartet nur, dass der this
-Wert eine length
-Eigenschaft und ganzzahlenschlüsselbasierte Eigenschaften hat. Obwohl Strings ebenfalls array-ähnlich sind, ist diese Methode nicht geeignet, um auf sie angewendet zu werden, da Strings unveränderlich sind.
Beispiele
Verwendung von copyWithin()
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 spärlichen Arrays
copyWithin()
wird leere Slots verbreiten.
console.log([1, , 3].copyWithin(2, 1, 2)); // [1, empty, empty]
Aufruf von copyWithin() auf Nicht-Array-Objekten
Die copyWithin()
-Methode liest die length
-Eigenschaft von this
und manipuliert dann die beinhalteten ganzzahligen Indizes.
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
BCD tables only load in the browser