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