Over verzamelingen in JavaScript
In het item "Over Verzamelingen" wordt in iets verteld over verzamelingen in het algemeen en over getallen in het bijzonder. Met Venn-diagrammen kunnen relaties tussen verzamelingen worden zichtbaar gemaakt.
JavaScript kent een datatype voor verzamelingen: Set.
Een Set is een Object. Het bevat een collectie uit alle in JavaScript mogelijke datatypen. Elk
element is uniek.Voor het beheren van de data in de Set zijn een aantal methodes en één eigenschap
beschikbaar.
Qua notatie ziet een Set er uit als een Array. Dat kan verwarrend zijn, wees daar dus op bedacht.
Onderstaand overzicht geeft de methodes voor verzamelingen in JavaScript.
Steeds wordt een set gebruikt die is gemaakt met:
let mijnSet = new Set(["a","b","c",1,2,3]);
mijnSet.add("d")Voegt het element"d"toe aanmijnSet.
Omdat alle elementen in een set uniek zijn, zal de opdrachtmijnSet.add("a")worden genegeerd. De set bevat immers al een element"a".mijnSet.clear()Verwijdert alle elementen uitmijnSet.mijnSet.delete("a")Verwijdert element"a". uitmijnSet.mijnSet.entries()Geeft een reeks van dataparen[key,waarde]terug. Omdat sets geenkeys kent, geeftentries()een reeks paren[waarde,waarde]terug. Feiltelijk is de key gelijk aan de waarde. In het geval vanmijnSetwordt dat[a,a],[b,b],[c,c],[1,1],[2,2],[3,3].
Een dergelijke reeks wordt Iterator genoemd.mijnSet.forEach("")Loopt een Iterator, die metentries()voormijnSetis bepaald, één voor één af.mijnSet.has("e")Kijkt of "e" inmijnSetaanwezig is. Als dat zo is wordt true teruggegeven, anders false.
In dit geval zou false het resultaat zijn.mijnSet.keys()Geeft een Iterator terug met keys vanmijnSet. In de praktijk zijn dat de waarden.mijnSet.values()Geeft een Iterator terug met waarden vanmijnSet.mijnSet.sizeDeze eigenschap bevat het aantal elementen inmijnSet.
Sinds 2025 is in JavaScript een aantal methodes toegevoegd, waarmee het mogelijk is om bewerkingen met verzamelingen uit
te voeren, zie onderstaand overzicht en het item over Venn-diagrammen.
Deze methodes accepteren niet alleen sets als argument, maar alles wat er op lijkt, waaronder maps. Arrays en WeakSets horen
daar niet bij.
De sets A en B zijn gemaakt met:
let A = new Set([1,2,3,4])
let B = new Set([2,4,6,8])
- Vereniging:
C = A ∪ B
De codelet C = A.union(B)geeft als resultaat: C = [1,2,3,4,6,8]. - Doorsnede:
C = A ∩ B
De codelet C = A.intersection(B)geeft als resultaat: C = [2,4]. - LegeDoorsnede:
C = A ∩ B, C = Ø
De codelet C = A.isDisjointFrom(B)geeft als resultaat: false, want de doorsnede is niet leeg. - Verschil:
C = A \ B
De codelet C = A.difference(B)geeft als resultaat: C = [1,3]. - Symmetrisch Verschil:
C = A &Delta B
De codelet C = A.symmetricDifference(B)geeft als resultaat: C = [1,3,6,8]. - Deelverzameling:
C = B ⊂ A
De codelet C = B.isSubSetOf(A)geeft als resultaat: false. - Omvat:
C = A ⊃ B
De codelet C = A.isSuperSetOf(B)geeft als resultaat: false.
Tenslotte…
Een belangrijk onderdeel van de JavaScript-processor is de Garbage Collector (afgekort: GC, vertaald: "Vuilnisophaler"),
Dit mechanisme zorgt ervoor dat de geheugenruimte die wordt ingenomen door niet (meer) gebruikte variabelen, functions, enz.,
wordt vrijgegeven tijdens de uitvoering van de applicatie. Dit houdt het geheugen 'schoon'. Het beperkt het geheugengebuik,
waardoor de adressering efficiënter verloopt. Dit komt de snelheid van de applicatie ten goede. Het beperkt ook het risico
van data-lekken.
In JavaScript zijn Sets hiervan uitgesloten!Dit betekent dat intensief manipuleren van grote hoeveelheden data binnen Sets kan leiden tot toenemend geheugengebruik, trager worden van de applicatie en data-lekkage.
Toepassing van Sets lijkt voornamelijk te liggen in serverside-applicaties (met bijv. node.js) die
websites aansturen. In een website (sec) ben ik het nog niet tegengekomen.
Bronnen:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
https://www.w3schools.com/js/js_sets.asp
