array.every(), array.some()
array.some() testet, ob ein Element des Arrays einer Bedingung folgt und bricht ab, sobald die Bedingung für ein Element zutrifft. array.every() testet, ob jedes Element eines Arrays einer Bedingung gehorcht, every() und some() geben nur zwei mögliche Werte zurück: true oder false.
Array some, Array every
Beide Methoden arbeitet mit zwei Argumenten: Einer Funktion, die über jedes Element läuft, und einem optionalen Objekt-Scope (Gültigkeitsbereich), in dem die Funktion läuft.
array.some() wird für die Suche, fürs Filtern, Validierung und Vergleiche gebraucht und ist effizient, denn die Methode bringt beim ersten Treffer ab. Programme suchen häufiger nach Ausnahmen oder Vorkommen (»gibt es mindestens eins?«) als nach vollständiger Übereinstimmung. In der Benutzerinteraktion reicht oft ein Klick, ein Fehler, ein Treffer – dafür ist some() ideal. Viele praktische Probleme brauchen nur eine partielle Übereinstimmung.array.some() – effizienter Ersatz für forEach
array.some() prüft mittels Callback-Funktion, ob mindestens ein Element des Arrays eine Bedingung erfüllt. Die Funktion wird für jeden Wert des Arrays ausgeführt, bis sie auf ein Element trifft, das die Bedingungen der Callback-Funktion erfüllt.
array.map(callback[, thisObject]);
- Sobald array.some() ein Element findet, bei dem die Bedingung zutrifft, gibt some() true zurück und prüft weitere Array-Elemente nicht mehr.
- Ansonsten (wenn kein Element den Test besteht) gibt some() false zurück.
const a = [17, 50, 2000, 75, 120]; const b = a.some (function(value, key, arr) { console.log (`key ${key} value ${value}`); return value > 50; }); console.log(`b ${b}`);
[Log] key 0 value 17 [Log] key 1 value 50 [Log] key 2 value 2000 [Log] b true
array.some ist also eine gute Alternative, um forEach zu ersetzen, denn forEach kann nicht sauber durch ein break abgebrochen werden.
Mit array.some() in Array of Objects suchen
Arrays, deren Elemente Objekte sind, begegnen wir vor allem in JSON-Daten.
let arr = [ { "titel": "Eine kurze Geschichte von fast allem", "autor": "Bryson, Bill" }, { "titel": "Accidental Empires", "autor": "Cringely, Robert X."}, { "titel": "Arm und Reich", "autor": "Diamond, Jared" } ]; let element = { "titel": "Arm und Reich" } console.log ( arr.some (item => item.title === element.title));
array.every()
array.every() prüft, ob alle Elemente eines Arrays einen Test bestehen.
- Sobald every() ein Element findet, für das die Bedingung nicht zutrifft, gibt every() false zurück und prüft weitere Array-Elemente nicht mehr.
- Wenn alle Elemente den Test bestehen, gibt every() true zurück.
Kurz: every() gibt false zurück, wenn nicht jedes Element true zurück gibt.
Das Beispiel gibt false zurück, weil -40 kleiner als 0 ist:
const nums = [30, 900, -40, 40, 60, 45, 75, 85]; let b = nums.every (function(n) { return (n > 0) }); console.log(`b ${b}`);
[LOG] b false
Das Beispiel gibt false zurück, weil every() null in false konvertiert:
let a = [1, 2, 3, null, 4, 5 ,6]; let b = a.every(function(item, index, array){ return item; }); console.log(b);
[LOG] false
Das Beispiel gibt false zurück, weil colors[1] > 360 den Test nicht besteht.
const colors = [30, 900, 40, 40, 60, 45, 75, 85]; document.getElementById("demo").innerHTML = colors.every(function (num) { return (num < 360 && num >= 0); });
Der Objekt-Scope
["a", "b", "c"].every(function(item, index, arr) { console.log(this); });
[LOG] window
["a", "b", "c"].every(function(item, index, arr) { console.log(this); }, "Apfelkuchen");
[LOG] String {0: "A", 1: "p", 2: "f", 3: "e", 4: "l", 5: "k", 6: "u", 7: "c", 8: "h", 9: "e", …}