Start · Sprachen · JavaScript · Referenz · TypedArray.prototype.reverse()

TypedArray.prototype.reverse()

Methode

Kehrt die Reihenfolge der Elemente eines typisierten Arrays direkt im Speicher um (in place) und gibt dasselbe typisierte Array zurück.

seit JavaScript ES2015 (Baseline: alle Browser, Node.js 4+) Kategorie: method-property

Signatur

TypedArray.prototype.reverse()

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

Typ
TypedArray
Beschreibung
Eine Referenz auf dasselbe typisierte Array, das jetzt umgekehrt ist. Es wird keine Kopie erzeugt.

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
Uint8Array(5) [5, 4, 3, 2, 1] true

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);
Int16Array(6) [10, 40, 30, 20, 50, 60]

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);
Float32Array(3) [0.5, 1.5, 2.5] Float32Array(3) [2.5, 1.5, 0.5] Float32Array(3) [2.5, 1.5, 0.5]

// Wichtig · Fallstricke

  • Verändert das Original: reverse() schreibt direkt in den ArrayBuffer. Alle anderen Sichten auf denselben Puffer sehen die Änderung ebenfalls. Das ist ein häufiger Fehler bei subarray(), denn subarray() teilt sich den Speicher mit dem Original, während slice() 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ür DataView mit dem Parameter littleEndian.
  • Kein Parameter: Übergebene Argumente werden ignoriert.
  • Abgelöster Puffer: Ist der zugrunde liegende ArrayBuffer abgelöst (detached), etwa nach einem Transfer über postMessage oder ArrayBuffer.prototype.transfer(), wirft der Aufruf einen TypeError.
  • Nicht generisch: Anders als Array.prototype.reverse() funktioniert die Methode nur, wenn this ein echtes typisiertes Array ist. Bei anderen Objekten gibt es einen TypeError.
  • 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).