Die copyWithin() Methode kopiert einen Teil eines Arrays in eine andere Stelle des gleichen Arrays und gibt das Array zurück, ohne die Länge des Arrays zu verändern.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Syntax
arr.copyWithin(target)
arr.copyWithin(target, start)
arr.copyWithin(target, start, end)
Parameter
target- Null-Basierter Index an dem die kopierte Sequenz kopiert wird. Wenn
targetnegativ ist, wird vom Ende angefangen zu zählen. - Wenn
targetglößer oder gleicharr.lengthist, wird nicht kopiert. Wenntargetnachstartpositioniert ist, wird die kopierte Sequenz gekürzt, um in die Länge des Arrays zu passen. startOptional- Null-Basierter Index an dem das Kopieren begonnen werden soll. Wenn
startnegativ ist, wird vom Ende angefangen zu zählen. - Wenn
startnicht angegeben wird, nutztcopyWithinden Standardwert 0. endOptional- Null-Basierter Index an dem das Kopieren beendet werden soll.
endist exklusiv und wird deswegen nicht mitkopiert. Wennendnegativ ist, wird vom Ende angefangen zu zählen. - Wenn
endnicht angegeben wird, nutztcopyWithinden Standardwertarr.length.
Rückgabewert
Das geänderte Array
Beschreibung
copyWithin arbeitet wie die memcpy Funktion in C und C++ und ist eine hoch perfomante Methode zum Verschieben von Daten in einem Array oder TypedArray. Die Sequenz wird in einer Operation kopiert und eingefügt; Die eingefügte Sequenz wird den kopierten Wert haben, auch wenn sich die Regionen im Array überschneiden.
Die copyWithin Funktion ist absichtlich generisch. Es wird nicht vorausgesetzt, dass this ein Array Objekt ist.
Die copyWithin Methode ist eine veränderbare Methode. Sie ändert nichts an der Länge von this, aber sie ändert den Inhalt von this und erstellt neue Eigenschaften, wenn es notwendig ist.
Beispiele
[1, 2, 3, 4, 5].copyWithin(-2);
// [1, 2, 3, 1, 2]
[1, 2, 3, 4, 5].copyWithin(0, 3);
// [4, 5, 3, 4, 5]
[1, 2, 3, 4, 5].copyWithin(0, 3, 4);
// [4, 2, 3, 4, 5]
[1, 2, 3, 4, 5].copyWithin(-2, -3, -1);
// [1, 2, 3, 3, 5]
[].copyWithin.call({length: 5, 3: 1}, 0, 3);
// {0: 1, 3: 1, length: 5}
// ES2015 Typed-Arrays sind Unterklassen von Array
var i32a = new Int32Array([1, 2, 3, 4, 5]);
i32a.copyWithin(0, 2);
// Int32Array [3, 4, 5, 4, 5]
// Für Plattformen die noch nicht ES6 unterstützen:
[].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);
// Int32Array [4, 2, 3, 4, 5]
Polyfill
if (!Array.prototype.copyWithin) {
Array.prototype.copyWithin = function(target, start/*, end*/) {
// Steps 1-2.
if (this == null) {
throw new TypeError('this is null or not defined');
}
var O = Object(this);
// Steps 3-5.
var len = O.length >>> 0;
// Steps 6-8.
var relativeTarget = target >> 0;
var to = relativeTarget < 0 ?
Math.max(len + relativeTarget, 0) :
Math.min(relativeTarget, len);
// Steps 9-11.
var relativeStart = start >> 0;
var from = relativeStart < 0 ?
Math.max(len + relativeStart, 0) :
Math.min(relativeStart, len);
// Steps 12-14.
var end = arguments[2];
var relativeEnd = end === undefined ? len : end >> 0;
var final = relativeEnd < 0 ?
Math.max(len + relativeEnd, 0) :
Math.min(relativeEnd, len);
// Step 15.
var count = Math.min(final - from, len - to);
// Steps 16-17.
var direction = 1;
if (from < to && to < (from + count)) {
direction = -1;
from += count - 1;
to += count - 1;
}
// Step 18.
while (count > 0) {
if (from in O) {
O[to] = O[from];
} else {
delete O[to];
}
from += direction;
to += direction;
count--;
}
// Step 19.
return O;
};
}
Spezifikationen
| Spezifikation | Status | Kommentar |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) Die Definition von 'Array.prototype.copyWithin' in dieser Spezifikation. |
Standard | Initiale Definition. |
| ECMAScript 2016 (ECMA-262) Die Definition von 'Array.prototype.copyWithin' in dieser Spezifikation. |
Standard | |
| ECMAScript (ECMA-262) Die Definition von 'Array.prototype.copyWithin' in dieser Spezifikation. |
Lebender Standard |
Browserkompatibilität
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
copyWithin | Chrome Vollständige Unterstützung 45 | Edge Vollständige Unterstützung 12 | Firefox Vollständige Unterstützung 32 | IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 32 | Safari Vollständige Unterstützung 9 | WebView Android Vollständige Unterstützung 45 | Chrome Android Vollständige Unterstützung 45 | Firefox Android Vollständige Unterstützung 32 | Opera Android Vollständige Unterstützung 32 | Safari iOS Vollständige Unterstützung 9 | Samsung Internet Android Vollständige Unterstützung 5.0 | nodejs Vollständige Unterstützung 4.0.0 |
Legende
- Vollständige Unterstützung
- Vollständige Unterstützung
- Keine Unterstützung
- Keine Unterstützung