Elemente finden: find(), some(), every()
Um ein Tier anhand seines Namens zu finden, würdest du eine Schleife mit break schreiben, wie in der Lektion über Schleifen:
let leo;
for (const tier of tiere) {
if (tier.name === "Leo") {
leo = tier;
break;
}
}
console.log(leo);{ name: "Leo", art: "Löwe", alter: 6 }let leo; erstellt eine Variable ohne Wert, sie enthält also undefined, bis die Schleife Leo findet. Die Methode find() macht dasselbe in einer Zeile. Sie gibt das erste Element zurück, für das der Callback true zurückgibt, und hört dort wie break auf zu suchen:
const leo = tiere.find((tier) => tier.name === "Leo");
console.log(leo.art);LöweAnders als filter(), das immer ein Array zurückgibt, gibt find() das Element selbst zurück. Wenn kein Element die Bedingung erfüllt, gibt die Methode undefined zurück. Eine Eigenschaft von undefined zu lesen beendet das Programm mit einem Fehler, prüfe das Ergebnis also zuerst:
const tiger = tiere.find((tier) => tier.art === "Tiger");
if (tiger === undefined) {
console.log("Wir haben keinen Tiger.");
} else {
console.log(tiger.name);
}Wir haben keinen Tiger.Manchmal brauchst du nicht das Element, sondern nur ein Ja oder ein Nein. some() gibt true zurück, wenn der Callback für mindestens ein Element true zurückgibt. every() gibt nur dann true zurück, wenn der Callback für alle Elemente true zurückgibt:
console.log(tiere.some((tier) => tier.alter > 10));
console.log(tiere.every((tier) => tier.alter > 3));true
falseElla ist älter als 10, also gibt some() true zurück. Pip ist erst 2, also ist nicht jedes Tier älter als 3, und every() gibt false zurück.
Ein typischer Fehler ist, filter() zu benutzen, wenn du ein einzelnes Element willst. tiere.filter((tier) => tier.name === "Leo").art ergibt undefined: filter() gibt ein Array zurück, in dem Leo steckt, und das Array hat keine Eigenschaft art.
So schreibst du es:
Anweisungen
- 1
Finde mit
find()das Buch, dessen Titel ingesuchtsteht, und gib seinen Autor aus:Michael Ende. Wenn die Bibliothek so ein Buch nicht hat, gib stattdessenDas haben wir nicht.aus. Probiere es aus: Änderegesuchtin"Heidi"und dann wieder zurück. - 2
Gib darunter mit
some()aus, ob mindestens ein Buch verfügbar ist:Einige verfügbar: true. Tipp:verfuegbarist schontrueoderfalse, also kann der Callback es unverändert zurückgeben. - 3
Gib zum Schluss mit
every()aus, ob alle Bücher verfügbar sind:Alle verfügbar: false.