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 Instanzen des Array
kopiert einen Teil dieses Arrays oberflächlich an eine andere Stelle im gleichen Array und gibt dieses Array zurück, ohne seine 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
copyWithin(target, start)
copyWithin(target, start, end)
Parameter
target
-
Nullbasierter Index, an dem die Sequenz kopiert werden soll, in eine Ganzzahl umgewandelt. Dies entspricht dem Ort, an den das Element bei
start
kopiert wird, und alle Elemente zwischenstart
undend
werden auf nachfolgende Indizes kopiert.- Ein negativer Index zählt rückwärts vom Ende des Arrays — 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, wird nur bis zum Ende vonarray.length
kopiert (mit anderen Worten,copyWithin()
erweitert niemals das Array).
- Ein negativer Index zählt rückwärts vom Ende des Arrays — wenn
start
-
Nullbasierter Index, ab dem die Elemente kopiert werden sollen, in eine Ganzzahl umgewandelt.
- Ein negativer Index zählt rückwärts vom Ende des Arrays — 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 rückwärts vom Ende des Arrays — wenn
end
Optional-
Nullbasierter Index, an dem das Kopieren der Elemente beendet wird, in eine Ganzzahl umgewandelt.
copyWithin()
kopiert bis, aber nicht einschließlichend
.- Ein negativer Index zählt rückwärts vom Ende des Arrays — 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 rückwärts vom Ende des Arrays — wenn
Rückgabewert
Das modifizierte Array.
Beschreibung
Die copyWithin()
-Methode funktioniert wie memmove
in C und C++ und ist eine leistungsfähige Methode, um die Daten eines Array
zu verschieben. Dies gilt insbesondere für die TypedArray
Methode mit demselben Namen. Die Sequenz wird als eine Operation kopiert und eingefügt; die eingefügte Sequenz hat die kopierten Werte, selbst wenn sich die Kopier- und Einfügebereiche überschneiden.
Da undefined
beim Konvertieren in eine Ganzzahl zu 0
wird, hat das Weglassen des start
-Parameters denselben Effekt wie die Übergabe von 0
, was das gesamte Array an die Zielposition kopiert, was einem Rechtsshift entspricht, bei dem der rechte Rand abgeschnitten und der linke Rand dupliziert wird. Dieses Verhalten kann Leser Ihres Codes verwirren, daher sollten Sie explizit 0
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 ändert nicht die Länge von this
, aber sie ändert den Inhalt von this
und erzeugt neue Eigenschaften oder löscht vorhandene Eigenschaften, wenn notwendig.
Die copyWithin()
-Methode bewahrt leere Felder. Wenn der zu kopierende Bereich spärlich ist, werden die entsprechenden neuen Indizes der leeren Felder gelöscht und bleiben ebenfalls leere Felder.
Die copyWithin()
-Methode ist generisch. Es wird nur vorausgesetzt, dass der this
-Wert eine length
-Eigenschaft und ganzzahlbezogene Eigenschaften hat. Obwohl Zeichenfolgen ebenfalls array-ähnlich sind, ist diese Methode für die Anwendung auf diese ungeeignet, da Zeichenfolgen 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() bei spärlichen Arrays
copyWithin()
propagiert leere Felder.
console.log([1, , 3].copyWithin(2, 1, 2)); // [1, empty, empty]
Aufruf von copyWithin() bei Nicht-Array-Objekten
Die copyWithin()
-Methode liest die length
-Eigenschaft von this
und manipuliert dann die beteiligten 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