Operacje na kolekcjach - filtrowanie
Filtorwanie pozwala wyciągnąć z tablicy te wartości, które spełniają zadany warunek.
Wyciągnijmy z listy studentów tych, którzy są aktywni.
Zaczniemy od wykorzystania pętli for-of
.
Przykład 2.2.1
let activeStudents = [];
for (let student of students) {
if (student.isActive) {
activeStudents.push(student);
}
}
log(activeStudents);
// -> (0) Christina Richmond
// -> (2) Viola Shelton
Ponownie uprościmy implementację wykorzystując metodę Array.forEach()
.
Przykład 2.2.2
let activeStudents = [];
students.forEach(student => {
if (student.isActive) {
activeStudents.push(student);
}
});
log(activeStudents);
// -> (0) Christina Richmond
// -> (2) Viola Shelton
Uzyskaliśmy uproszczoną implementację metody Array.filter()
. Przyjmuje ona jako parametr funckję, która sprawdza czy element spełnia zadany warunek.
Przykład 2.2.3
let activeStudents = students.filter(student => student.isActive);
log(activeStudents);
// -> (0) Christina Richmond
// -> (2) Viola Shelton
Możemy również zagnieżdżać filtrowanie aby uzyskać nieco bardziej skomplikowane zapytania.
Wyciągnijmy z listy studentów tych, którzy uczęszczają do klasy 1B
.
Przykład 2.2.4
let studentsFrom1B = students
.filter(student => student.classes.filter(c => c === '1B').length > 0);
log(studentsFrom1B);
// -> (1) Austin Wooten
// -> (3) Marisol Sargent
// -> (4) Hawkins Everett
Połączenie mapowania oraz filtrowania
Bardzo często przydaje się połączenie metod Array.map()
oraz Array.filter()
.
Wyciągnijmy z tablicy studentów imiona, które zawierają w sobie literę n
.
Możemy to zrobić korzystając z metody Array.forEach()
.
Przykład 2.2.5
let namesWithN = [];
students.forEach(student => {
let name = student.firstName;
if (name.toLowerCase().indexOf('n') > 0) {
namesWithN.push(name);
}
});
console.log(namesWithN);
// -> ["Christina", "Austin", "Hawkins"]
Jednak o wiele lepiej będzie skorzystać z metod Array.map()
i Array.filter()
.
Przykład 2.2.6
let namesWithN = students
.map(student => student.firstName)
.filter(name => name.toLowerCase().indexOf('n') > 0);
console.log(namesWithN);
// -> ["Christina", "Austin", "Hawkins"]
Ćwiczenia
(2.2.1) Wyciągnij z listy studentów tych, którzy są dorośli. Przyjmij, że dorosłym jest student, który ma conajmniej 21 lat.
(2.2.2) Wykorzsytując kod z ćwiczenia 2.2.1 wyciągnij z listy studentów imiona i nazwiska dorosłych studentów.