Zoeken…


Invoering

Met het object Set kunt u unieke waarden van elk type opslaan, of het nu primitieve waarden of objectverwijzingen zijn.

Set-objecten zijn verzamelingen waarden. U kunt de elementen van een set in invoegvolgorde doorlopen. Een waarde in de Set kan slechts EENS voorkomen; het is uniek in de verzameling van de Set. Verschillende waarden worden onderscheiden met behulp van het SameValueZero- vergelijkingsalgoritme.

Standaard Specificatie Over Set

Syntaxis

  • nieuwe set ([iterable])
  • mySet.add (value)
  • mySet.clear ()
  • mySet.delete (value)
  • mySet.entries ()
  • mySet.forEach (callback [, thisArg])
  • mySet.has (value)
  • mySet.values ()

parameters

Parameter Details
iterable Als een iterabel object wordt doorgegeven, worden alle elementen toegevoegd aan de nieuwe set. null wordt behandeld als ongedefinieerd.
waarde De waarde van het element dat moet worden toegevoegd aan het object Set.
Bel terug Uit te voeren functie voor elk element.
thisArg Optioneel. Waarde om als deze te gebruiken bij het uitvoeren van callback.

Opmerkingen

Omdat elke waarde in de set uniek moet zijn, wordt de waarde-gelijkheid gecontroleerd en is deze niet gebaseerd op hetzelfde algoritme als het algoritme dat wordt gebruikt in de operator ===. Specifiek zijn voor sets +0 (die strikt gelijk is aan -0) en -0 verschillende waarden. Dit is echter gewijzigd in de nieuwste ECMAScript 6-specificatie. Beginnend met Gecko 29.0 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) (bug 952870) en een recent nachtelijk Chrome, worden +0 en -0 behandeld als dezelfde waarde in Set-objecten. Ook kunnen NaN en undefined worden opgeslagen in een Set. NaN wordt als hetzelfde beschouwd als NaN (hoewel NaN! == NaN).

Een set maken

Met het object Set kunt u unieke waarden van elk type opslaan, of het nu primitieve waarden of objectverwijzingen zijn.

U kunt items in een set pushen en ze herhalen op dezelfde manier als een gewone JavaScript-array, maar in tegenstelling tot een array kunt u geen waarde aan een set toevoegen als de waarde al bestaat.

Om een nieuwe set te maken:

const mySet = new Set();

Of u kunt een set maken van elk iterabel object om het startwaarden te geven:

const arr = [1,2,3,4,4,5];
const mySet = new Set(arr);

In het bovenstaande voorbeeld zou de ingestelde inhoud {1, 2, 3, 4, 5} . Merk op dat de waarde 4 slechts eenmaal wordt weergegeven, in tegenstelling tot de oorspronkelijke array die is gebruikt om deze te maken.

Een waarde toevoegen aan een set

Gebruik de methode .add() om een waarde aan een set .add() :

mySet.add(5);

Als de waarde al in de set bestaat, wordt deze niet opnieuw toegevoegd, omdat sets unieke waarden bevatten.

Merk op dat de methode .add() de set zelf retourneert, zodat u aan elkaar gekoppelde aanroepen kunt koppelen:

mySet.add(1).add(2).add(3);

Waarde verwijderen uit een set

Gebruik de methode .delete() om een waarde uit een set te verwijderen:

mySet.delete(some_val);

Deze functie retourneert true als de waarde in de set bestond en werd verwijderd, of anders false .

Controleren of er een waarde bestaat in een set

Gebruik de methode .has() om te controleren of een bepaalde waarde in een set .has() :

mySet.has(someVal);

Zal true retourneren als someVal in de set voorkomt, anders false .

Een set wissen

U kunt alle elementen in een set verwijderen met de methode .clear() :

mySet.clear();

Lengte instellen

U kunt het aantal elementen in de set krijgen met de eigenschap .size

const mySet = new Set([1, 2, 2, 3]);
mySet.add(4);
mySet.size; // 4

Deze eigenschap is, in tegenstelling tot Array.prototype.length , alleen-lezen, wat betekent dat u deze niet kunt wijzigen door er iets aan toe te wijzen:

mySet.size = 5;
mySet.size; // 4

In de strikte modus geeft het zelfs een fout:

TypeError: Cannot set property size of #<Set> which has only a getter

Sets naar arrays converteren

Soms moet u een set naar een array converteren, bijvoorbeeld om Array.prototype methoden zoals .filter() te kunnen gebruiken. Gebruik hiervoor Array.from() of destructuring-assignment :

var mySet = new Set([1, 2, 3, 4]);
//use Array.from
const myArray = Array.from(mySet);
//use destructuring-assignment
const myArray = [...mySet];

Nu kunt u de array filteren op alleen even getallen en deze terugzetten naar Set met Set constructor:

mySet = new Set(myArray.filter(x => x % 2 === 0));

mySet bevat nu alleen even nummers:

console.log(mySet); // Set {2, 4}

Kruising en verschil in sets

Er zijn geen ingebouwde methoden voor snijpunten en verschillen in sets, maar u kunt dat nog steeds bereiken, maar ze converteren naar arrays, filteren en terug converteren naar sets:

var set1 = new Set([1, 2, 3, 4]),
    set2 = new Set([3, 4, 5, 6]);

const intersection = new Set(Array.from(set1).filter(x => set2.has(x)));//Set {3, 4}
const difference = new Set(Array.from(set1).filter(x => !set2.has(x))); //Set {1, 2}

Sets herhalen

Je kunt een eenvoudige for-of-lus gebruiken om een set te herhalen:

const mySet = new Set([1, 2, 3]);

for (const value of mySet) {
  console.log(value); // logs 1, 2 and 3
}

Wanneer een set wordt herhaald, worden altijd waarden geretourneerd in de volgorde waarin ze voor het eerst aan de set zijn toegevoegd. Bijvoorbeeld:

const set = new Set([4, 5, 6])
set.add(10)
set.add(5) //5 already exists in the set
Array.from(set) //[4, 5, 6, 10]

Er is ook een .forEach() -methode, vergelijkbaar met Array.prototype.forEach() . Het heeft twee parameters, callback , die voor elk element worden uitgevoerd, en optionele thisArg , die als this zullen worden gebruikt bij het uitvoeren van callback .

callback heeft drie argumenten. De eerste twee argumenten zijn beide het huidige element van Set (voor consistentie met Array.prototype.forEach() en Map.prototype.forEach() ) en het derde argument is de Set zelf.

mySet.forEach((value, value2, set) => console.log(value)); // logs 1, 2 and 3


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow