Signatur
Beschreibung
Die Methode reverse() steht auf allen typisierten Arrays zur Verfügung (Int8Array, Uint8Array, Float32Array, BigInt64Array usw.). Sie vertauscht die Elemente so, dass das erste Element zum letzten wird und umgekehrt. Der Algorithmus entspricht dem von Array.prototype.reverse(). Es wird aber kein neues Array angelegt: Das Ergebnis wird direkt in den zugrunde liegenden ArrayBuffer geschrieben.
Weil die Methode den Inhalt verändert, wirkt sich die Umkehrung auf alle Sichten (Views) aus, die denselben Speicherbereich nutzen. Das gilt auch für andere typisierte Arrays oder für DataView-Objekte auf demselben Puffer. Gibt es einen Teilbereich (etwa über subarray()), wird nur dieser Ausschnitt umgekehrt. Der übrige Puffer bleibt unverändert.
Typische Einsatzfälle sind das Umdrehen von Audio-Samples (Rückwärts-Wiedergabe), die Verarbeitung von Messreihen oder Pixelzeilen und das Umkehren von Byte-Folgen. Wenn du das Original behalten willst, nimm toReversed() (ES2023). Diese Methode gibt eine umgekehrte Kopie zurück.
Rückgabewert
Beispiele
Einfache Umkehrung eines Uint8Array
const bytes = new Uint8Array([1, 2, 3, 4, 5]);
const result = bytes.reverse();
console.log(bytes); // Original ist verändert
console.log(result === bytes); // gleiche Referenz
Audio-Samples für Rückwärts-Wiedergabe umkehren
const ctx = new AudioContext();
const playReversed = async (url) => {
const response = await fetch(url);
const arrayBuffer = await response.arrayBuffer();
const audioBuffer = await ctx.decodeAudioData(arrayBuffer);
// Jeden Kanal (Float32Array) in place umkehren
for (let ch = 0; ch < audioBuffer.numberOfChannels; ch++) {
audioBuffer.getChannelData(ch).reverse();
}
const source = ctx.createBufferSource();
source.buffer = audioBuffer;
source.connect(ctx.destination);
source.start();
};
playReversed('/sounds/intro.mp3');
Nur einen Teilbereich über subarray() umkehren
const data = new Int16Array([10, 20, 30, 40, 50, 60]);
// subarray teilt sich den Puffer mit dem Original
data.subarray(1, 4).reverse();
console.log(data);
Original erhalten: Kopie oder toReversed()
const values = new Float32Array([0.5, 1.5, 2.5]);
// Variante 1: erst kopieren, dann umkehren
const reversedCopy = values.slice().reverse();
// Variante 2 (ES2023): nicht verändernde Methode
const reversed = values.toReversed();
console.log(values);
console.log(reversedCopy);
console.log(reversed);
// Wichtig · Fallstricke
- Verändert das Original:
reverse()schreibt direkt in denArrayBuffer. Alle anderen Sichten auf denselben Puffer sehen die Änderung ebenfalls. Das ist ein häufiger Fehler beisubarray(), dennsubarray()teilt sich den Speicher mit dem Original, währendslice()eine Kopie anlegt. - Elemente, nicht Bytes: Die Methode kehrt die Reihenfolge der Elemente um, nicht die Byte-Reihenfolge innerhalb eines Elements. Für eine Umwandlung der Endianness von z. B.
Uint32Array-Werten eignet sie sich nicht. Nimm dafürDataViewmit dem ParameterlittleEndian. - Kein Parameter: Übergebene Argumente werden ignoriert.
- Abgelöster Puffer: Ist der zugrunde liegende
ArrayBufferabgelöst (detached), etwa nach einem Transfer überpostMessageoderArrayBuffer.prototype.transfer(), wirft der Aufruf einenTypeError. - Nicht generisch: Anders als
Array.prototype.reverse()funktioniert die Methode nur, wennthisein echtes typisiertes Array ist. Bei anderen Objekten gibt es einenTypeError. - Kompatibilität: Wird seit ES2015 von allen modernen Browsern und Node.js unterstützt. Die nicht verändernde Alternative
toReversed()gibt es erst seit ES2023 (Chrome 110, Firefox 115, Safari 16, Node.js 20).