Signatur
Beschreibung
toReversed() ist die nicht-mutierende Variante von TypedArray.prototype.reverse(). Während reverse() die Elemente direkt im zugrunde liegenden Puffer umdreht und dasselbe Objekt zurückgibt, erzeugt toReversed() ein neues typisiertes Array desselben Typs (z. B. Uint8Array, Float32Array) mit eigenem ArrayBuffer. Das Original bleibt unverändert.
Die Methode gehört zu den mit ES2023 eingeführten „Change Array by Copy“-Methoden (toReversed(), toSorted(), with()). Für typisierte Arrays gibt es toSpliced() absichtlich nicht, weil sich deren Länge nicht ändern lässt.
Sinnvoll ist toReversed() immer dann, wenn Binärdaten gemeinsam genutzt werden, etwa Audio-Samples, Pixeldaten oder Messreihen, und andere Programmteile weiter mit der ursprünglichen Reihenfolge arbeiten sollen. Das gilt auch, wenn mehrere Views auf denselben Puffer zeigen: Ein reverse() würde alle diese Views gleichzeitig verändern.
Rückgabewert
ArrayBuffer.Beispiele
Grundlegende Nutzung: Original bleibt erhalten
const werte = new Uint8Array([1, 2, 3, 4, 5]);
const umgekehrt = werte.toReversed();
console.log(umgekehrt); // neue Kopie
console.log(werte); // unverändert
console.log(umgekehrt instanceof Uint8Array);
Unterschied zu reverse() bei geteiltem Puffer
const buffer = new ArrayBuffer(4);
const a = new Uint8Array(buffer);
const b = new Uint8Array(buffer); // zweite View auf denselben Speicher
a.set([10, 20, 30, 40]);
const kopie = a.toReversed();
console.log(b); // unberührt
console.log(kopie.buffer === buffer); // eigener Puffer
a.reverse(); // mutiert den geteilten Puffer
console.log(b);
Audio-Samples rückwärts abspielen (Web Audio)
const ctx = new AudioContext();
const playReversed = (audioBuffer) => {
const reversedBuffer = ctx.createBuffer(
audioBuffer.numberOfChannels,
audioBuffer.length,
audioBuffer.sampleRate
);
for (let ch = 0; ch < audioBuffer.numberOfChannels; ch++) {
// Float32Array des Originals bleibt unverändert
const samples = audioBuffer.getChannelData(ch).toReversed();
reversedBuffer.copyToChannel(samples, ch);
}
const source = ctx.createBufferSource();
source.buffer = reversedBuffer;
source.connect(ctx.destination);
source.start();
};
Feature-Erkennung mit Fallback
const reverseCopy = (ta) =>
typeof ta.toReversed === 'function'
? ta.toReversed()
: ta.slice().reverse(); // slice() kopiert ebenfalls in einen neuen Puffer
console.log(reverseCopy(new Int16Array([-1, 0, 1])));
// Wichtig · Fallstricke
- Kompatibilität: Die Methode gibt es erst seit ES2023. Ältere Browser und Node.js vor Version 20 kennen sie nicht. Als Fallback eignet sich
ta.slice().reverse(). - Speicherbedarf: Es wird immer ein vollständiger neuer Puffer angelegt. Bei sehr großen Daten, etwa mehreren hundert MB, verdoppelt sich also kurzzeitig der Speicherverbrauch. Wenn keine Kopie nötig ist, ist
reverse()sparsamer. - Die Kopie verwendet immer einen normalen
ArrayBuffer, auch wenn das Original auf einemSharedArrayBufferliegt. Außerdem enthält sie nur den Ausschnitt der View (byteOffset/length) und nicht den ganzen Quellpuffer. - Der Rückgabetyp entspricht dem Konstruktor des Originals.
Symbol.specieswird dabei nicht berücksichtigt, anders als beislice()odermap(). - Ist der Puffer des Originals abgekoppelt (detached), zum Beispiel nach einem Transfer per
postMessage, wirft der Aufruf einenTypeError.