Der Browser-Speicher localStorage ist nicht verfügbar. Entweder unterstützt dein Browser ihn nicht oder du hast ihn deaktiviert oder er ist voll. Ohne localStorage werden deine Lösungen nicht gespeichert.
Array: filter()
Eine weitere wichtige Array-Methode mit Funktionsparamter ist
filter(). Sie filtert aus einem Array alle
Elemente heraus, die einen durch die Callback-Funktion implementierten Test bestehen, und gibt diese als neues Array zurück.
Die Callback-Funktion muss dabei bei Aufruf mit einem Array-Element entweder true oder false
ergeben. Array-Elemente, die true ergeben, landen im gefilterten Array. Das ursprüngliche Array wird wie bei map()
nicht verändert.
let numbers = [7, -6, 120, -21, 2];
// [7, 120, 2]
let positiveNumbers = numbers.filter(x => x > 0);
// [-6, -21]
let negativeNumbers = numbers.filter(x => x < 0);
// [-6, 120, 2]
let evenNumbers = numbers.filter(x => x % 2 === 0);
Läßt sich die Filterbedingung wie hier in einem kurzen Ausdruck darstellen, so kann man die Callback-Funktion elegant
als Pfeilfunktion übergeben. In komplexeren Fällen ist eine eigenständige Funktion sinnvoll:
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
function isPrime(num) {
if (num < 2) {
// nicht prim, weil zu klein
return false;
}
for (let i = 2; i < num; i++) {
if (num % i === 0) {
// nicht prim, weil teilbar
return false;
}
}
// prim
return true;
}
// [2, 3, 5, 7]
const primes = numbers.filter(isPrime);Aufgabe
Schreibe eine Funktion
Beispiel:
filterBlau, die ein Array mit Strings entgegennimmt
und alle Array-Elemente, die den String 'blau' enthalten, als Array zurückgibt. Groß- und Kleinschreibung
soll keine Rolle spielen.Beispiel:
filterBlau(['Korngelb', 'Tannenblau', 'Rosenrot']) sollte
['Tannenblau'] ergeben.
+ Tipp
Schreibe zunächst eine Funktion
containsBlau(), die einen String entgegennimmt und true zurückgibt,
wenn der String 'blau' enhält. Enthält er nicht 'blau', soll false zurückgegeben werden. Groß- und Kleinschreibung
soll keine Rolle spielen. Verwende dann die Array-Funktion filter() zusammen mit containsBlau(), um die geforderte Funktion
filterBlau() zu schreiben.
+ Lösung
function containsBlau(word) {
return word.toLowerCase().indexOf('blau') >= 0;
}
function filterBlau(words) {
return words.filter(containsBlau);
}
