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

TypedArray.prototype.some()

Methode

Prüft, ob mindestens ein Element des typisierten Arrays die Testfunktion erfüllt, und gibt dann <code>true</code> zurück, sonst <code>false</code>.

seit JavaScript ES2015 Kategorie: method-property

Signatur

TypedArray.prototype.some(callbackFn, thisArg)

Beschreibung

Die Methode some() ruft die übergebene Testfunktion callbackFn für jedes Element eines typisierten Arrays (z. B. Uint8Array, Float32Array) der Reihe nach auf. Sobald die Funktion einen truthy Wert liefert, bricht some() sofort ab und gibt true zurück. Liefert die Funktion für kein Element einen truthy Wert, lautet das Ergebnis false.

Der Algorithmus ist derselbe wie bei Array.prototype.some(). Weil typisierte Arrays aber immer eine feste Länge haben und keine Lücken enthalten können, wird die Testfunktion auch wirklich für jeden Index bis zum ersten Treffer aufgerufen.

Typische Anwendungsfälle: prüfen, ob in Binärdaten ein bestimmter Bytewert vorkommt, ob Messwerte oder Audio-Samples einen Grenzwert überschreiten oder ob ein Puffer ungültige Werte wie NaN enthält. Die Methode verändert das Array nicht. Die Testfunktion selbst könnte es aber verändern, was man vermeiden sollte.

Parameter

Name Typ Default Beschreibung
$callbackFn Pflicht (element: number | bigint, index: number, array: TypedArray) => unknown Testfunktion, die für jedes Element aufgerufen wird. Sie bekommt element (den aktuellen Wert), index (dessen Position) und array (das typisierte Array selbst). Gibt sie einen truthy Wert zurück, gilt das Element als Treffer.
$thisArg any undefined Wert, der beim Aufruf von callbackFn als this gilt. Bei Pfeilfunktionen hat er keine Wirkung.

Beispiele

Grenzwert in Messwerten erkennen

const temperaturen = new Float32Array([21.5, 22.1, 38.7, 20.9]);
const ueberhitzt = temperaturen.some((wert) => wert > 35);
console.log(ueberhitzt);
true

Leeres Array und fehlender Treffer

const leer = new Uint8Array(0);
console.log(leer.some(() => true));

const bytes = new Uint8Array([1, 2, 3]);
console.log(bytes.some((b) => b === 0));
false false

Ungültige Werte (NaN) in einem Puffer finden

const samples = new Float64Array([0.1, NaN, 0.3]);
const hatNaN = samples.some(Number.isNaN);
console.log(hatNaN);
true

Dateisignatur prüfen: kommt ein Null-Byte vor?

const pruefeBinaer = async (url) => {
  const response = await fetch(url);
  const bytes = new Uint8Array(await response.arrayBuffer());
  // Null-Bytes in den ersten 512 Bytes deuten auf eine Binärdatei hin
  return bytes.subarray(0, 512).some((b) => b === 0x00);
};

pruefeBinaer('/logo.png').then((istBinaer) => console.log(istBinaer));
true

// Wichtig · Fallstricke

  • Vorzeitiger Abbruch: some() hört beim ersten Treffer auf. Nebenwirkungen in der Testfunktion finden daher nicht für alle Elemente statt.
  • Kein Array-Ersatz: Die Methode gibt es nur auf typisierten Arrays. Mit TypedArray.prototype.some.call() lässt sie sich nicht auf normale Arrays anwenden, denn das löst einen TypeError aus.
  • BigInt-Arrays: Bei BigInt64Array und BigUint64Array sind die Elemente vom Typ bigint. Vergleiche müssen dann BigInt-Literale verwenden, z. B. x > 10n. Ein Vergleich wie x === 10 ist immer false.
  • Abgelöster Puffer: Wurde der zugrunde liegende ArrayBuffer abgelöst, etwa per transfer() oder postMessage mit Transfer-Liste, löst der Aufruf einen TypeError aus.
  • Nur Existenz prüfen: Wenn nur ein bestimmter Wert gesucht wird, ist includes() kürzer und oft schneller. Für die Position des Treffers eignet sich findIndex().
  • Kompatibilität: Wird von allen modernen Browsern und von Node.js unterstützt (Baseline).