- Objavljeno
JavaScript setovi: Uvod za početnike programera
- Autori
- Ime
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
Zašto koristiti skup (Set)?
Skup je struktura podataka koja vam omogućava da pohranite jedinstvene vrijednosti bilo kojeg tipa. Sličan je nizu, ali ne dozvoljava duplicirane vrijednosti. Izvrstan je način za čuvanje jedinstvenih vrijednosti bilo koje vrste. Ponekad želite pohraniti jedinstvene vrijednosti u niz, ali ne želite prolaziti kroz cijeli niz kako biste provjerili postoji li već ta vrijednost. Tu je skup od velike koristi.
U prethodnom članku, raspravljali smo o Javascript mapi. Skup je sličan mapi, ali pohranjuje samo ključeve, a ne vrijednosti. To je odličan način da se održe jedinstvene vrijednosti bilo kojeg tipa. Previše je slučajeva kada je preopterećujuće koristiti mapu. Zato hajde da pričamo o skupovima.
Šta je JavaScript skup (Set)?
Objekti skupova su kolekcije vrijednosti. Vrijednost u skupu može se pojaviti samo jednom; ona je jedinstvena u kolekciji skupa. Možete proći kroz elemente skupa u redoslijedu umetanja. Redoslijed umetanja odgovara redoslijedu u kojem je svaki element umetnut u skup metodom add()
(tj. nije bilo identičnog elementa već u skupu kada je skup pozvao add()
).
Specifikacija zahtijeva da se skupovi implementiraju "tako da, u prosjeku, pružaju vrijeme pristupa koje je sublinearno na broju elemenata u kolekciji." Stoga bi se internu predstavljanju mogao koristiti hash stol (sa O(1) pretragom), pretraživačko stablo (sa O(log(N)) pretragom) ili bilo koja druga struktura podataka, sve dok je složenost bolja od O(N).
Kako kreirati skup?
Postoje dva načina za kreiranje skupa. Prvi način je korištenje konstruktora skupa. Drugi način je korištenje literala objekta skupa.
Konstruktor skupa
Konstruktor skupa kreira novi objekat skupa. Možete proći iterabilni objekt kao argument konstruktoru. Elementi iterabilnog objekta će biti dodani novom skupu.
const set = new Set([1, 2, 3, 4, 5])
Literal objekta skupa
Literal objekta skupa kreira novi objekat skupa. Možete proći iterabilni objekt kao argument literalu objekta. Elementi iterabilnog objekta će biti dodani novom skupu.
const set = {1, 2, 3, 4, 5};
Metode i svojstvo skupa
Metoda | Opis |
---|---|
add() | Dodaje novi element sa određenom vrijednošću u objekat skupa. |
clear() | Uklanja sve elemente iz objekta skupa. |
delete() | Uklanja element povezan s vrijednošću i vraća vrijednost koju bi Set.prototype.has(value) ranije vratio. Set.prototype.has(value) će nakon toga vratiti false. |
entries() | Vraća novi Iterator objekt koji sadrži niz od [value, value] za svaki element u objektu skupa, u redoslijedu umetanja. |
forEach() | Izvršava zadanu funkciju jednom za svaku vrijednost u objektu skupa, u redoslijedu umetanja. |
has() | Vraća boolean koji potvrđuje da li je element prisutan sa zadanom vrijednošću u objektu skupa. |
keys() | Vraća novi Iterator objekt koji sadrži vrijednosti za svaki element u objektu skupa u redoslijedu umetanja. |
values() | Vraća novi Iterator objekt koji sadrži vrijednosti za svaki element u objektu skupa u redoslijedu umetanja. |
Svojstvo | Opis |
---|---|
size | Vraća broj vrijednosti u objektu skupa. |
Primjeri skupa
Dodavanje vrijednosti u skup
const set = new Set([1, 2, 3, 4, 5])
set.add(6)
console.log(Set) // Set { 1, 2, 3, 4, 5, 6 }
Brisanje vrijednosti iz skupa
const set = new Set([1, 2, 3, 4, 5])
set.delete(3)
console.log(set) // Set { 1, 2, 4, 5 }
Provjera da li vrijednost postoji u skupu
const set = new Set([1, 2, 3, 4, 5])
console.log(set.has(3)) // true
Iteriranje kroz skup
const set = new Set([1, 2, 3, 4, 5])
for (const item of Set) {
console.log(item)
}
// 1
// 2
// 3
// 4
// 5
Konverzija skupa u niz
const set = new Set([1, 2, 3, 4, 5])
const array = Array.from(set)
console.log(array) // [1, 2, 3, 4, 5]
Konverzija niza u skup
const Array = [1, 2, 3, 4, 5]
const set = new Set(array)
console.log(Set) // Set { 1, 2, 3, 4, 5 }
Dobivanje veličine skupa
const set = new Set([1, 2, 3, 4, 5])
console.log(set.size) // 5
Brisanje skupa
const set = new Set([1, 2, 3, 4, 5])
set.clear()
console.log(set) // Set {}
Spajanje skupova
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([6, 7, 8, 9, 10])
const set3 = new Set([...set1, ...set2])
console.log(set3) // Set { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
Dobivanje presjeka dva skupa
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5, 6, 7, 8])
const set3 = new Set([...set1].filter((x) => set2.has(x)))
console.log(set3) // Set { 4, 5 }
Dobivanje razlike između dva skupa
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5, 6, 7, 8])
const set3 = new Set([...set1].filter((x) => !set2.has(x)))
console.log(set3) // Set { 1, 2, 3 }
Provjera da li je jedan skup podskup drugog skupa
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5])
console.log([...set2].every((x) => set1.has(x))) // true
Provjera da li je jedan skup nadskup drugog skupa
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5])
console.log([...set1].every((x) => set2.has(x))) // false
Provjera da li su dva skupa disjunktna
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([6, 7, 8, 9, 10])
console.log([...set1].every((x) => !set2.has(x))) // true
Provjera da li su dva skupa jednaka
const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([1, 2, 3, 4, 5])
console.log(set1.size === set2.size && [...set1].every((x) => set2.has(x))) // true
Podrška preglednika
Chrome | Firefox | Edge | Safari | Opera |
---|---|---|---|---|
49+ | 44+ | 12+ | 10.1+ | 36+ |
Skup nasuprot nizu
Skup | Niz |
---|---|
Jedinstvena vrijednost, ne dozvoljava duplicirane vrijednosti | Dozvoljava duplicirane vrijednosti |
Skup je kolekcija vrijednosti u nekom određenom redoslijedu | Niz je kolekcija vrijednosti u određenom redoslijedu |
Skup je iterabilni | Niz je iterabilni |
Skup je sporiji od niza u inicijalizaciji jer koristi hash proces. | Niz je brži u smislu inicijalizacije |
Performanse su bolje pri provjeri postojanja elementa | Performanse su bolje pri pristupanju elementu |
Ovaj članak je originalno objavljen na blog.imam.dev.