JavaScript/Objekte/Array/some
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 wirdindex
: Index des aktuellen Elementsarray
: der Array, der mitsome()
aufgerufen wurde
thisArg
: Optional. Derthis
-Wert, der beim Aufruf der Callback-Funktion gesetzt werden soll
Der Rückgabewert der Callback-Funktion wird automatisch in einen booleschen Wert konvertiert.
Achtung!
true
zurückgegeben hat. Danach bricht some
den Durchlauf ab, weil das Ergebnis nun feststeht. Inhaltsverzeichnis
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.
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.
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
.
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
- ECMAScript 2015 (6th Edition, ECMA-262): Array.prototype.some