Pochopení sad v JavaScriptu

Sady představují novou funkčnost v JavaScriptu, zavedenou v ES6. Pojďme se na ně podívat blíže.

Co přesně sady jsou?

Jak s nimi pracovat v JavaScriptu?

A jaké metody nabízejí pro řešení konkrétních úkolů?

Odpovědi na všechny tyto otázky najdete v následujícím textu.

Sady v detailu

Jak už název napovídá, sada je datová struktura, která uchovává pouze unikátní prvky. Nepovoluje duplicitní hodnoty.

V JavaScriptu sady ukládají prvky v pořadí, ve kterém byly do sady vloženy. To znamená, že prvky v sadě jsou seřazeny. Sady mohou obsahovat jak primitivní datové typy, tak i objekty.

Podívejme se na syntaxi pro vytváření sad v JavaScriptu.

Doporučuji mít po ruce IDE, abyste si následující příklady mohli rovnou vyzkoušet.

const jmena = new Set(["Petr", "Karel", "Jan", "Josef", "Karel"]);
console.log(jmena);

const nahodneSlovo = new Set("Ahooooj");
console.log(nahodneSlovo);

const cisla = new Set([7, 7, 7, 3, 1, 1, 3, 6]);
console.log(cisla);

Vlastnosti a metody

Sady disponují řadou vlastností a metod, které nám usnadňují práci s nimi a řešení různých problémů. Práce s nimi je stejně jednoduchá jako jejich vytváření. Funkce metod je zřejmá už z jejich názvů. Podívejme se na ně postupně.

velikost

Vlastnost `size` vrací počet prvků, které se aktuálně nacházejí v sadě.

const jmena = new Set(["Petr", "Karel", "Jan", "Josef", "Karel"]);
console.log(`Velikost: ${jmena.size}`);

přidat

Metoda `add` se používá k přidání nového prvku do sady. Pokud se prvek, který se snažíme přidat, už v sadě nachází, nebude přidán znovu.

// prázdná sada
const jmena = new Set();

jmena.add("Petr");
jmena.add("Karel");
jmena.add("Jan");
jmena.add("Josef");
jmena.add("Karel");

console.log(jmena);

Metoda `has` přijímá jeden argument a vrací `true`, pokud se daný prvek v sadě nachází, jinak vrací `false`.

const jmena = new Set(["Petr", "Karel", "Jan", "Josef", "Karel"]);

console.log(jmena.has("Karel"));
console.log(jmena.has("Alena"));

vymazat

Jak už název napovídá, metoda `delete` přijímá jeden argument a smaže daný prvek ze sady. Pokud se prvek v sadě nenachází, nevyvolá to žádnou chybu.

const jmena = new Set(["Petr", "Karel", "Jan", "Josef", "Karel"]);

jmena.delete("Petr");

console.log(jmena);

záznamy

Metoda `entries` vrací iterátor, který obsahuje pole párů klíč-hodnota v pořadí, v jakém byly prvky vloženy. V případě sady je klíč totožný s hodnotou.

const jmena = new Set(["Petr", "Karel", "Jan", "Josef", "Karel"]);

const zaznamy = jmena.entries();

console.log(zaznamy.next().value);
console.log(zaznamy.next().value);
console.log(zaznamy.next().value);
console.log(zaznamy.next().value);
console.log(zaznamy.next().value);

klíče

Metoda `keys` vrací iterátor prvků sady v pořadí, v jakém byly do sady vloženy.

const jmena = new Set(["Petr", "Karel", "Jan", "Josef", "Karel"]);

const klice = jmena.keys();

console.log(klice.next().value);
console.log(klice.next().value);
console.log(klice.next().value);
console.log(klice.next().value);
console.log(klice.next().value);

hodnoty

Metoda `values` vrací iterátor prvků sady v pořadí, v jakém byly do sady vloženy, podobně jako metoda `keys`.

const jmena = new Set(["Petr", "Karel", "Jan", "Josef", "Karel"]);

const hodnoty = jmena.values();

console.log(hodnoty.next().value);
console.log(hodnoty.next().value);
console.log(hodnoty.next().value);
console.log(hodnoty.next().value);
console.log(hodnoty.next().value);

průhledná

Metoda `clear` odstraní všechny prvky ze sady.

const jmena = new Set(["Petr", "Karel", "Jan", "Josef", "Karel"]);

jmena.clear();

console.log(jmena);

pro každého

Metoda `forEach` se používá k iteraci sady a postupnému získávání všech jejích prvků.

const jmena = new Set(["Petr", "Karel", "Jan", "Josef", "Karel"]);

jmena.forEach((element) => {
   console.log(element);
});

Příklad použití

Podívejme se na jednoduchý praktický příklad použití sady. Úkolem je odstranit duplicitní hodnoty z daného pole. K vyřešení tohoto problému můžeme využít vlastností sady.

Podívejme se na postup řešení:

  • Inicializujeme pole s fiktivními daty.
  • Inicializujeme prázdnou sadu.
  • Projdeme prvky pole.
    • Každý prvek přidáme do sady.
    • Duplicitní prvky budou automaticky odstraněny.
  • Inicializujeme prázdné pole.
  • Projdeme sadu a každý prvek přidáme do nového pole.
  • Vytiskneme nové pole.

Zkuste si tento příklad vyřešit sami. Pokud se vám to nedaří, podívejte se na řešení níže.

const arr = ["Petr", "Karel", "Jan", "Josef", "Karel"];

const temp = new Set();

arr.forEach((element) => {
    temp.add(element);
});

const newArr = [];

temp.forEach((element) => {
    newArr.push(element);
});

console.log(newArr);

Závěr

Nyní máte všechny potřebné znalosti pro práci se sadami v JavaScriptu. Můžete je s úspěchem použít ve vašich projektech. Neostýchejte se a vyzkoušejte si jejich možnosti v praxi.

Ať se vám při kódování daří! 👨‍💻