04.02 Přístup k prvkům
Výuka
Proč Přístup k prvkům?
Pokud máš pole, potřebuješ číst a měnit jeho prvky. Přístup k prvkům pomocí indexu je základní operace s poli.
Proč to potřebujeme?
- Čtení hodnot - Získat konkrétní prvek z pole
- Modifikace - Změnit hodnotu na určité pozici
- Délka pole - Zjistit, kolik prvků pole obsahuje
- Iterace - Projít všechny prvky jeden po druhém
Představ si to jako: Regál s přihr
ádkami. Každá přihrádka má číslo (index). Když chceš vzít knihu z třetí přihrádky, řekneš: "Dej mi knihu z přihrádky číslo 2" (protože číslování začíná od 0!).
Jak to funguje?
1. Indexy začínají od 0 (ne od 1!)
2. První prvek má index 0, druhý index 1, atd.
3. Přístup: pole[index]
4. Zápis: pole[index] = nováHodnota
5. Přístup mimo rozsah vrátí undefined
6. Délka pole: pole.length
Klíčové koncepty
- Index - pozice prvku v poli (začíná od 0)
- Indexování od nuly (zero-based indexing) - první prvek má index 0
- Bracket notation
[]- syntaxe pro přístup k prvkům length- vlastnost vracející počet prvků- Out of bounds - přístup mimo rozsah (vrací
undefined) - Záporné indexy - JavaScript je nepodporuje (na rozdíl od Pythonu)
JavaScript
Příklad 1: Čtení prvků pomocí indexu
const fruits = ['jablko', 'banán', 'třešeň', 'datle'];
console.log(fruits[0]); // První prvek
// → jablko
console.log(fruits[2]); // Třetí prvek
// → třešeň
console.log(fruits[3]); // Čtvrtý prvek
// → datle
Co se stalo?
fruits[0]- první prvek (index 0)fruits[2]- třetí prvek (index 2, ne 3!)- Indexy začínají od 0, takže index = pozice - 1
Příklad 2: Přístup k prvnímu a poslednímu prvku
const numbers = [10, 20, 30, 40, 50];
// První prvek
const first = numbers[0];
console.log(first);
// → 10
// Poslední prvek - použij length - 1
const last = numbers[numbers.length - 1];
console.log(last);
// → 50
console.log(numbers.length);
// → 5 (počet prvků)
Co se stalo?
- První prvek:
pole[0] - Poslední prvek:
pole[pole.length - 1] lengthje 5, ale indexy jdou od 0 do 4 (proto length - 1)
Příklad 3: Změna hodnoty prvku
const colors = ['červená', 'zelená', 'modrá'];
console.log(colors);
// → ['červená', 'zelená', 'modrá']
// Změň druhý prvek (index 1)
colors[1] = 'žlutá';
console.log(colors);
// → ['červená', 'žlutá', 'modrá']
// Změň první prvek
colors[0] = 'fialová';
console.log(colors);
// → ['fialová', 'žlutá', 'modrá']
Co se stalo?
pole[index] = novaHodnota- přepíše hodnotu na dané pozici- Pole je mutovatelné - můžeš měnit jeho prvky
- (Poznámka: V TypeScriptu můžeš použít
readonlypro zabránění změnám)
Příklad 4: Přístup mimo rozsah (out of bounds)
const arr = [1, 2, 3];
console.log(arr[5]);
// → undefined (index neexistuje)
console.log(arr[-1]);
// → undefined (záporné indexy nejsou podporovány)
console.log(arr[100]);
// → undefined
Co se stalo?
- Přístup mimo rozsah nevrací chybu, ale
undefined - JavaScript (na rozdíl od Pythonu) nepodporuje záporné indexy
arr[-1]není "poslední prvek", aleundefined
Příklad 5: Dynamické indexování
const items = ['a', 'b', 'c', 'd'];
for (let i = 0; i < items.length; i++) {
console.log(`Index ${i}: ${items[i]}`);
}
// → Index 0: a
// → Index 1: b
// → Index 2: c
// → Index 3: d
Co se stalo?
- V cyklu používáme proměnnou
ijako index izačíná od 0 a jde doitems.length - 1- Toto je klasický pattern pro iteraci přes pole
Příklad 6: length vlastnost - čtení a zápis
const arr = [1, 2, 3, 4, 5];
console.log(arr.length);
// → 5
// Zkrátíme pole nastavením length
arr.length = 3;
console.log(arr);
// → [1, 2, 3] (poslední 2 prvky smazány!)
// Prodloužíme pole
arr.length = 5;
console.log(arr);
// → [1, 2, 3, empty × 2] (přidány prázdné sloty)
Co se stalo?
lengthmůžeš i zapisovat, ne jen číst- Zkrácení
lengthsmaže prvky za novou délkou - Prodloužení
lengthpřidá prázdné sloty - Pozor: Toto je nebezpečné - raději používej metody jako
slice()nebosplice()
TypeScript
TypeScript přidává typovou kontrolu při přístupu k prvkům - zkontroluje, že pracuješ se správným typem.
Stejné příklady s typy
const fruits: string[] = ['jablko', 'banán', 'třešeň'];
// Přístup k prvku
const first: string = fruits[0]; // ✅ OK
console.log(first); // → jablko
// TypeScript inferuje typ
const second = fruits[1]; // second má typ string
console.log(second); // → banán
// Přístup mimo rozsah - stále vrací string | undefined
const outOfBounds = fruits[10]; // typ: string | undefined
console.log(outOfBounds); // → undefined
// Změna hodnoty
fruits[0] = 'hruška'; // ✅ OK - string
fruits[1] = 123; // ❌ Error: Type 'number' is not assignable to type 'string'
// Length
const len: number = fruits.length;
// Readonly pole - nelze měnit
const readonly: readonly string[] = ['a', 'b', 'c'];
// readonly[0] = 'd'; // ❌ Error: Index signature in type 'readonly string[]' only permits reading
// Tuple - přístup s typovou kontrolou na pozicích
const tuple: [string, number] = ['Alice', 25];
const name: string = tuple[0]; // ✅ OK - první je string
const age: number = tuple[1]; // ✅ OK - druhý je number
// const wrong: string = tuple[1]; // ❌ Error: Type 'number' is not assignable to type 'string'
TypeScript přidává:
- ✅ Typovou kontrolu prvků - nemůžeš vložit špatný typ
- ✅ Inference - TypeScript pozná typ prvku z typu pole
- ✅ Readonly kontrolu -
readonly T[]brání změnám - ✅ Tuple kontrolu - kontroluje typy na konkrétních pozicích
Rozdíl JS vs TS
JavaScript:
- Přístup k prvkům bez typové kontroly
- Můžeš vložit jakýkoli typ na jakoukoli pozici
- Chyby odhalíš až při běhu
- Flexibilnější, ale nebezpečnější
TypeScript:
- Přístup s typovou kontrolou
- Nemůžeš vložit špatný typ prvku
- Chyby odhalíš už při psaní kódu
- Bezpečnější, lépe dokumentované
// JavaScript - projde, ale může způsobit problém
const numbers = [1, 2, 3];
numbers[0] = 'text'; // OK v JS
console.log(numbers[0] * 2); // NaN (text * 2 = NaN)
// TypeScript - editor tě upozorní
const numbers: number[] = [1, 2, 3];
numbers[0] = 'text'; // ❌ Error: Type 'string' is not assignable to type 'number'
Tip
💡 Poslední prvek pomocí length - 1:
const arr = [1, 2, 3, 4, 5];
// ✅ Správně - poslední prvek
const last = arr[arr.length - 1]; // 5
// ❌ Špatně - záporné indexy nefungují v JS
const wrong = arr[-1]; // undefined (ne poslední prvek!)
// ✅ Alternativa - at() metoda (ES2022+)
const last = arr.at(-1); // 5 (podpora záporných indexů)
💡 Kontroluj rozsah před přístupem:
const arr = [1, 2, 3];
const index = 5;
// ❌ Špatně - nekontroluješ rozsah
const value = arr[index]; // undefined
// ✅ Dobře - kontroluješ rozsah
if (index >= 0 && index < arr.length) {
const value = arr[index];
console.log(value);
} else {
console.log('Index mimo rozsah');
}
💡 Neměň length ručně - použij metody:
const arr = [1, 2, 3, 4, 5];
// ❌ Nebezpečné - manuální změna length
arr.length = 3;
// ✅ Bezpečnější - použij slice()
const shortened = arr.slice(0, 3); // [1, 2, 3] (nové pole)
// ✅ Nebo splice() pro mutaci
arr.splice(3); // odstraní prvky od indexu 3 dál
Kvíz
Co vypíše tento kód?
const arr = ['a', 'b', 'c'];
arr[arr.length] = 'd';
console.log(arr);
❌ - Pole se změnilo, přidal se prvek
✅ - arr.length je 3, takže arr[3] = 'd' přidá prvek na konec. Toto je trik pro přidání prvku (ale lepší je push())
❌ - Prvek se přidal na konec, ne na začátek
❌ - Není to chyba, JavaScript to dovolí
Důležité: arr[arr.length] = x přidá prvek na konec, ale lepší je použít arr.push(x)!
Důležité: arr[arr.length] = x přidá prvek na konec, ale lepší je použít arr.push(x)!
🎯 Závěrečný projekt
Po dokončení všech 8 dílů vytvoříte jednoduchou Todо aplikaci v čistém JavaScriptu. Naučíte se, jak aplikovat vše, co jste se naučili, na reálný projekt.
Zobrazit podrobnosti projektu →Informace o seriálu
Obtížnost
Délka
Cca 480 minut
Počet videí
8 videí + projekty
Certifikát
Po dokončení obdržíte certifikát
Lekce v této sekci
- 04.01 Vytvoření pole
- 04.02 Přístup k prvkům
- 04.03 Push, pop, shift, unshift
- 04.04 Slice a splice
- 04.06 Filter
- 04.07 Reduce
- 04.08 Find a findIndex
- 04.09 Some a every
- 04.10 Sort
- 04.11 Spread operátor
- 04.12 Set
- 04.13 Map kolekce
- 04.14 Destructuring polí
Struktura lekcí (souborový strom)
- 1.1 Úvod do JavaScriptu a TypeScriptu
- 1.2 Nastavení prostředí
- 1.3 První program
- 1.4 Proměnné: var, let, const
- 1.5 Datové typy - přehled
- 1.6 String (řetězce)
- 1.7 Number (čísla)
- 1.8 Boolean (pravda/nepravda)
- 1.9 Null a Undefined
- 1.10 Type Inference vs Annotations
- 1.11 Aritmetické operátory
- 1.12 Porovnávací operátory
- 1.13 Logické operátory
- 1.14 Komentáře
- 1.15 Console metody
- 03.01 Deklarace funkce
- 03.02 Function Expression
- 03.03 Arrow Functions
- 03.04 Parametry a argumenty
- 03.05 Return hodnoty
- 03.06 Výchozí parametry
- 03.07 Rest parametry
- 03.08 Co je Scope
- 03.09 Lexikální Scope
- 03.10 Řetězec Scope
- 03.11 Globální Scope
- 03.12 Životní Cyklus Proměnných
- 03.13 Omezení Scope
- 03.14 Použití Closures
- 03.15 Callback funkce
- 03.16 Higher-order Functions
- 03.17 IIFE
- 03.18 Void funkce
- 03.19 Rekurze
- v přípravě
- v přípravě
- v přípravě
- v přípravě
- 01 — Co je Next.js
- 02 — Vytvoření projektu
- 03 — Struktura projektu (app/)
- 04 — Page komponenty (page.js / page.tsx)
- 05 — Layout komponenty (layout.js / layout.tsx)
- 06 — File-based routing
- 07 — Dynamické routy ([id]/page.js)
- 08 — Link komponenta (navigace)
- 09 — Image komponenta (next/image)
- 10 — Metadata (title, description, Open Graph)
- 11 — Loading UI (loading.js / loading.tsx)
- 12 — Error handling (error.js / error.tsx)
- 13 — Not Found (not-found.js / not-found.tsx)
- v přípravě
- v přípravě
- v přípravě