array.every(), array.some()

Javascript array  every (), array some ()

array.every() testet, ob jedes Element eines Arrays einer Bedingung gehorcht, array.some() testet, ob ein Element des Arrays einer Bedingung folgt. every() und some() geben nur zwei mögliche Werte zurück: true oder false.

23-02-02 SITEMAP CSS HTML JS Basis JS Web Tutorial SVG

Array every, Array some

Schon in ECMAScript 5 (2009) sind native Methoden für die Iteration über Arrays hinzugekommen: for in, forEach, every, some, map, filter, reduce, reduceRight. Lang genug her, so dass sie auch von alten Browsern unterstützt werden.

Jede dieser 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.map(callback[, thisObject]);

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", …}

array.some()

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.

  • 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));

Browser-Support für every(), some()

Alle modernen Browser, IE ab Version 9.