JavaScript/Objekte/Array/some

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Die Methode some ermöglicht es, die Einträge eines Arrays daraufhin zu untersuchen, ob ein Element enthalten ist, das einem bestimmten als Parameter übergebenen Eigenschaftenprofil entspricht.

Syntax

ergebnis = array.some(callback[, thisArg])

Folgende Parameter sind möglich:

  • callback: Funktion, mit der die Array-Elemente überprüft werden. Sie erhält drei Argumente:
    • currentValue: aktuelles Element, das überprüft wird
    • index: Index des aktuellen Elements
    • array: der Array, der mit some() aufgerufen wurde
  • thisArg: Optional. Der this-Wert, der beim Aufruf der Callback-Funktion gesetzt werden soll

Der Rückgabewert der Callback-Funktion wird automatisch in einen booleschen Wert konvertiert.

Achtung!

Die Callback-Funktion wird nur so lange aufgerufen, bis sie einmal true zurückgegeben hat. Danach bricht some den Durchlauf ab, weil das Ergebnis nun feststeht.

Beschreibung

Die Methode some erwartet als erstes Argument ein Prädikat, also eine Funktion, die ein Element des Arrays entgegennimmt und einen der booleschen Werte true und false zurückgibt. Diese Funktion wird von some für jedes Element des Arrays aufgerufen, beginnend bei Index 0, bis zum Element mit dem höchsten Index. Sie erhält dabei das Element selbst, sein Index und eine Referenz auf das Array als Argumente. Gibt die Funktion für eines der Elemente true zurück, wird die Ausführung von some beendet und true zurückgegeben, andernfalls false.#

Das ursprüngliche Array wird durch some nicht verändert.

Wird some auf einem leeren Array aufgerufen, dann ist der zurückgegebene Wert stets false, unabhängig von der übergebenen Prädikatfunktion. Das liegt daran, dass in diesem Fall kein Element existiert, das die Aussage bestätigen könnte. Die übergebene Funktion wird nie aufgerufen. some verhält sich also wie der Existenzquantor in der Prädikatenlogik.

Darüber hinaus besitzt some einen optionalen zweiten Parameter, über den ein Wert für die Kontextvariable this der Callbackfunktion angegeben werden kann. Diese Angabe hat allerdings keine Wirkung bei Pfeilfunktionen, da diese keine eigene Bindung für einen Funktionskontext besitzen.

Wie die meisten anderen Array-Methoden auch, ist some nicht nur für echte Arrays verwendbar, sondern kann auch für andere, array-artige Objekte genutzt werden.

Beispiel
var myArray = ['Goofy', 'Snert', 'Idefix', 'Garfield', 'Rantanplan', 'Milou'];

var check = myArray.some(name => name.length === 8);

// check = true;

Wird ein Element gefunden, das den Test besteht, wird die Suche umgehend abgebrochen und true zurückgegeben, sonst false. Die Funktion von some besteht also lediglich darin, zu prüfen ob ein entsprechender Eintrag vorhanden ist, nicht jedoch darin, das Array nach mehreren entsprechenden Elementen zu durchsuchen und diese zurückzugeben. Hierfür wäre zum Beispiel die Methode filter die bessere Wahl.

Parameter

An die Methode some können zwei Parameter übergeben werden, und zwar erstens die Callback-Funktion sowie zweitens ein optionaler Parameter, der verwendet wird, um den this-Wert vorzugeben, der beim Aufruf der Callback-Funktion verwendet werden soll. Wird er weggelassen, enthält this den Wert des globalen Objekts bzw. null im strict mode.

[1, 22, 3].some(function (value, index, array) { return value > 10}, reference)

Der erste an die Callback-Funktion übergebene Parameter ist der Wert des Elementes, für das die Funktion aufgerufen wird, der zweite Parameter beinhaltet den Index dieses Elementes und der dritte das Objekt, für welches die Methode ausgeführt wird.

Rückgabe

Der Rückgabewert der Callback-Funktion wird bei Bedarf automatisch in einen boolschen Wert umgewandelt. Die Methode selbst gibt dann true oder false zurück, je nach dem, ob ein passendes Element gefunden wurde oder nicht. Das Array beziehungsweise das Objekt welches durchsucht wird, wird dabei nicht verändert.

Beispiel
let hasBaz = [ {bar : 42}, {baz : true} ].some( object => object.hasOwnProperty('baz') );

console.log(hasBaz);     // true;

Verwandte Funktionen

Die some-Methode stellt lediglich fest, ob es ein Array-Element gibt, das die gewünschte Eigenschaft besitzt. Wenn Sie Zugriff auf dieses Element erhalten möchten, verwenden Sie statt dessen die Methode JavaScript/Objekte/Array/find. Wenn Sie den Index dieses Elements benötigen, verwenden Sie die Methode findIndex.

Wenn zum Auffinden eines Elements ein einfacher Wertvergleich genügt, können Sie seine Existenz einfacher mit der Methode includes feststellen und seinen Index mit der indexOf-Methode ermitteln.

Wenn Sie wissen möchten, ob alle Einträge in einem Array einer bestimmten Bedingung genügen, dann können Sie die Array-Methode every verwenden. Sie liefert true, wenn ihr Callback für jeden Array-Eintrag true zurückgibt. Es könnte sein, dass Ihnen die Formulierung dieser Bedingung schwer fällt und es leichter ist, eine Bedingung für das Gegenteil aufzustellen. Mit dieser Gegen-Bedingung könnten Sie dann wieder some benutzen, um festzustellen, ob es Array-Elemente gibt, die das Gegenteil erfüllen und daraus ableiten, ob alle Array-Elemente die eigentliche Bedingung erfüllen.

Das folgende Beispiel zeigt dies an Hand einer sehr einfachen Bedingung. Verwendet man die negierte Bedingung und negiert dann auch das Ergebnis von some, entspricht das Ergebnis dem von every.

some und every sind zwei Seiten einer Medaille
const array1 = [ 1, 2, 3, 4, 5 ];
const array2 = [ 1, -2, 3, -4, 5 ];

const istPositiv = zahl => zahl > 0;
const istNichtPositiv = zahl => zahl <= 0;

zeigeErgebnis("array1", array1.every(istPositiv));
zeigeErgebnis("array1", !array1.some(istNichtPositiv));

zeigeErgebnis("array2", array2.every(istPositiv));
zeigeErgebnis("array2", !array2.some(istNichtPositiv));

function zeigeErgebnis(name, ergebnis) {
   if (ergebnis) {
      console.log(`Alle Einträge in ${name} sind positiv`);
   }
   else {
      console.log(`In ${name} sind Einträge vorhanden, die nicht positiv sind`);
   }
}

Quellen