MODUŁ 12
Tablice obiektów i wyszukiwanie danych
PPrezentacja dla nauczyciela
Większość aplikacji internetowych przetwarza zbiory danych: listy produktów, bazę pracowników czy katalog wycieczek. W tym module nauczysz się organizować informacje w tablice obiektów, precyzyjnie wyszukiwać rekordy po identyfikatorach oraz filtrować dane według wybranych kryteriów.
Struktura tablicy obiektów i odczyt właściwości
Tablica obiektów to jedna z najważniejszych struktur danych w języku JavaScript. Pozwala przechowywać powiązane zestawy informacji w uporządkowanej kolekcji, gdzie każdy element tablicy jest obiektem o określonych parach klucz-wartość:
const pracownicy = [
{ nazwisko: 'Marta Wiśniewska', dzial: 'Wsparcie techniczne', kontakt: 'marta@firma.pl' },
{ nazwisko: 'Tomasz Zieliński', dzial: 'Programista frontend', kontakt: 'tomasz@firma.pl' }
];
Dostęp do konkretnego obiektu uzyskujemy poprzez jego indeks w nawiasach kwadratowych (np. pracownicy[0]), a do jego poszczególnych pól odwołujemy się za pomocą notacji kropkowej: pracownicy[0].nazwisko lub nawiasów kwadratowych: pracownicy[0]['nazwisko'].
Dzięki powiązaniu indeksu lub identyfikatora z wartością kontrolki <select>, możemy natychmiast zaktualizować dane prezentowane na stronie po wybraniu nowej osoby z listy.
Tablica jest dynamiczna — może rosnąć w trakcie działania programu. Metoda push() dodaje nowy element na końcu tablicy i zwraca jej nową długość. Dzięki temu obiekt zbudowany z danych formularza można dopisać do kolekcji i od razu pokazać na stronie:
const nowy = { nazwisko: 'Anna Nowak', dzial: 'Księgowość', kontakt: 'anna@firma.pl' };
pracownicy.push(nowy); // dopisanie na końcu
console.log(pracownicy.length); // 3 — liczba elementów rośnie
Liczbę elementów tablicy podaje właściwość length, a ostatni element usuwa pop(). Po każdej zmianie zawartości trzeba ponownie odświeżyć widok (np. wygenerować listę od nowa), bo strona nie aktualizuje się sama.
const pracownicy = [
{ nazwisko: 'Marta Wiśniewska', dzial: 'Wsparcie techniczne', kontakt: 'marta@firma.pl' },
{ nazwisko: 'Tomasz Zieliński', dzial: 'Programista frontend', kontakt: 'tomasz@firma.pl' }
];
function pokazSzczegolyPracownika() {
const indeks = Number(document.getElementById('wybierzOsobe').value);
const wybranaOsoba = pracownicy[indeks];
document.getElementById('kartaNazwisko').innerHTML = 'Nazwisko: ' + wybranaOsoba.nazwisko;
document.getElementById('kartaDzial').innerHTML = 'Dział: ' + wybranaOsoba.dzial;
document.getElementById('kartaKontakt').innerHTML = 'Kontakt: ' + wybranaOsoba.kontakt;
}
Wyszukiwanie rekordu za pomocą metody find
Metoda tablica.find() służy do odnalezienia pierwszego elementu w kolekcji, który spełnia zdefiniowany warunek logiczny. Przekazujemy do niej funkcję zwrotną (tzw. predykat), która zwraca true dla poszukiwanego rekordu:
const wynik = magazyn.find(item => item.kod === 'A10');
Jeżeli żaden obiekt w tablicy nie spełni kryteriów, metoda find() zwraca specjalną wartość undefined.
Zawsze należy sprawdzić wynik za pomocą instrukcji warunkowej: if (wynik) { ... } else { ... }. Bezpośrednia próba odczytania właściwości na niezabezpieczonym obiekcie (np. wynik.cena, gdy nic nie znaleziono) spowoduje błąd krytyczny skryptu TypeError.
const magazyn = [
{ kod: 'A10', nazwa: 'Klawiatura mechaniczna', cena: 249 },
{ kod: 'B20', nazwa: 'Mysz gamingowa', cena: 159 },
{ kod: 'C30', nazwa: 'Podkładka XXL', cena: 69 }
];
function wyszukajTowar() {
const kod = document.getElementById('szukanyKod').value.trim().toUpperCase();
const wynikTekst = document.getElementById('wynikWyszukiwania');
const towar = magazyn.find(function(item) {
return item.kod === kod;
});
if (towar) {
wynikTekst.textContent = towar.nazwa + ' — cena: ' + towar.cena + ' zł';
wynikTekst.style.color = '#16a34a';
} else {
wynikTekst.textContent = 'Brak w magazynie towaru o kodzie: ' + kod;
wynikTekst.style.color = '#dc2626';
}
}
Filtrowanie danych metodą filter i prezentacja
Gdy użytkownik chce zobaczyć nie jeden rekord, lecz podzbiór danych spełniający określone kryteria (np. wszystkie wycieczki do Grecji lub towary tańsze niż 100 zł), korzystamy z metody tablica.filter().
Metoda filter() iteruje po elementach i tworzy nową tablicę, zawierającą wyłącznie te obiekty, dla których funkcja testująca zwróciła wartość true. Oryginalna tablica źródłowa pozostaje nienaruszona.
Aby obsłużyć wariant „wszystkie kategorie”, stosujemy alternatywę logiczną: wybranaKategoria === 'wszystkie' || element.kraj === wybranaKategoria. Po odfiltrowaniu czyścimy kontener i generujemy listę pasujących pozycji.
const wycieczki = [
{ nazwa: 'Ateny i Akropol', kraj: 'Grecja', cena: 1890 },
{ nazwa: 'Rzym i Watykan', kraj: 'Włochy', cena: 2150 },
{ nazwa: 'Wyspa Zakynthos', kraj: 'Grecja', cena: 2400 },
{ nazwa: 'Barcelona i Costa Brava', kraj: 'Hiszpania', cena: 1990 }
];
function filtrujWycieczki() {
const wybranyKraj = document.getElementById('filtrKategoria').value;
const lista = document.getElementById('listaOfert');
lista.innerHTML = '';
const przefiltrowane = wycieczki.filter(function(w) {
return wybranyKraj === 'wszystkie' || w.kraj === wybranyKraj;
});
przefiltrowane.forEach(function(w) {
const li = document.createElement('li');
li.innerHTML = '' + w.nazwa + ' (' + w.kraj + ') ' + w.cena + ' zł';
lista.appendChild(li);
});
}
Ćwiczenia
- 1Odczyt właściwości obiektu z tablicyOdczytaj nazwę i cenę pierwszego towaru z tablicy obiektów i wpisz do akapitu.Zadanie i podpowiedzi →
- 2Zliczanie obiektów w tablicyWykorzystaj właściwość length do wyświetlenia liczby studentów w rejestrze.Zadanie i podpowiedzi →
- 3Prezentacja listy tytułów metodą forEachPrzejdź po tablicy obiektów metodą forEach i wygeneruj elementy li z tytułami książek.Zadanie i podpowiedzi →
- 4Sumowanie wartości obiektów w pętliOblicz łączną sumę cen wszystkich produktów zapisanych w tablicy obiektów.Zadanie i podpowiedzi →
- 5Wyszukiwanie obiektu metodą find po numerze IDZnajdź użytkownika o podanym identyfikatorze korzystając z metody tablicowej find().Zadanie i podpowiedzi →
- 6Obsługa braku wyniku wyszukiwania w findZabezpiecz skrypt przed błędem wyświetlając komunikat gdy metoda find zwróci undefined.Zadanie i podpowiedzi →
- 7Wyszukiwanie tekstowe bez względu na wielkość literZastosuj toLowerCase() do porównywania nazwisk podczas wyszukiwania w tablicy.Zadanie i podpowiedzi →
- 8Wyszukiwanie obiektu o maksymalnej ceniePrzejdź po tablicy obiektów, znajdź produkt o najwyższej cenie i przedstaw go w akapicie.Zadanie i podpowiedzi →
- 9Filtrowanie tablicy obiektów metodą filterWybierz podzbiór obiektów o wskazanej kategorii za pomocą metody filter().Zadanie i podpowiedzi →
- 10Filtrowanie pozycji według maksymalnej cenyWyświetl w liście wyłącznie usługi, których cena nie przekracza limitu z pola input.Zadanie i podpowiedzi →
- 11Tabela aktywnych kont użytkownikówPrzefiltruj użytkowników ze statusem aktywny i wygeneruj wiersze tr w tabeli.Zadanie i podpowiedzi →
- 12Dodawanie obiektu do tablicy metodą pushZbierz dane z formularza, stwórz obiekt i dołącz go na koniec tablicy metodą push().Zadanie i podpowiedzi →
- 13Usuwanie obiektu z tablicy przez filterUsuń element z tablicy obiektów nadpisując ją wynikiem metody filter() z warunkiem negacji ID.Zadanie i podpowiedzi →
- 14Weryfikacja warunku metodą someSprawdź za pomocą metody some() czy w grupie użytkowników znajduje się administrator.Zadanie i podpowiedzi →
- 15Weryfikacja grupy za pomocą metody everySprawdź metodą every() czy wszyscy uczestnicy kursu zdali egzamin końcowy.Zadanie i podpowiedzi →
- 16Interaktywna wyszukiwarka produktów na żywoFiltruj listę artykułów w czasie rzeczywistym podczas wpisywania tekstu w zdarzeniu input.Zadanie i podpowiedzi →