Sök…


Introduktion

Med Set-objektet kan du lagra unika värden av vilken typ som helst, oavsett om det är primitiva värden eller objektreferenser.

Ställobjekt är värdesamlingar. Du kan iterera genom elementen i en uppsättning i införingsordning. Ett värde i inställnings får endast förekomma en gång; det är unikt i Set-kollektionen. Särskilda värden diskrimineras med hjälp av SameValueZero- jämförelsealgoritmen.

Standardspecifikation om uppsättning

Syntax

  • ny uppsättning ([iterable])
  • mySet.add (värde)
  • mySet.clear ()
  • mySet.delete (värde)
  • mySet.entries ()
  • mySet.forEach (callback [, thisArg])
  • mySet.has (värde)
  • mySet.values ()

parametrar

Parameter detaljer
iterable Om ett iterbart objekt passeras kommer alla dess element att läggas till i den nya uppsättningen. null behandlas som odefinierad.
värde Värdet på elementet som ska läggas till Set-objektet.
ring tillbaka Funktion för att utföra för varje element.
thisArg Valfri. Värde att använda som detta vid körning av återuppringning.

Anmärkningar

Eftersom varje värde i uppsättningen måste vara unikt kontrolleras värdet jämställdhet och baseras inte på samma algoritm som den som används i operatören ===. Specifikt för Sets är +0 (som strikt lika med -0) och -0 olika värden. Detta har dock ändrats i den senaste ECMAScript 6-specifikationen. Börjar med Gecko 29.0 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) (bugg 952870) och en nylig nattlig Chrome, +0 och -0 behandlas som samma värde i Set-objekt. Dessutom kan NaN och odefinierade också lagras i en uppsättning. NaN anses vara samma som NaN (även om NaN! == NaN).

Skapa en uppsättning

Med Set-objektet kan du lagra unika värden av vilken typ som helst, oavsett om det är primitiva värden eller objektreferenser.

Du kan skjuta objekt in i en uppsättning och iterera dem som liknar en vanlig JavaScript-array, men till skillnad från array kan du inte lägga till ett värde till en Set om värdet redan finns i det.

Så här skapar du en ny uppsättning:

const mySet = new Set();

Eller så kan du skapa en uppsättning från vilket iterable-objekt som helst för att ge det startvärden:

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

I exemplet ovan skulle det inställda innehållet vara {1, 2, 3, 4, 5} . Observera att värdet 4 endast visas en gång, till skillnad från i den ursprungliga matrisen som användes för att skapa det.

Lägga till ett värde i en uppsättning

För att lägga till ett värde i en uppsättning använder .add() metoden .add() :

mySet.add(5);

Om värdet redan finns i uppsättningen kommer det inte att läggas till igen eftersom uppsättningarna innehåller unika värden.

Observera att .add() returnerar själva uppsättningen, så att du kan kedja lägga samtal tillsammans:

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

Tar bort värdet från en uppsättning

För att ta bort ett värde från en uppsättning använder .delete() metoden .delete() :

mySet.delete(some_val);

Den här funktionen kommer att återgå till true om värdet fanns i uppsättningen och togs bort, eller i annat fall false .

Kontrollera om ett värde finns i en uppsättning

För att kontrollera om ett givet värde finns i en uppsättning använder .has() metoden .has() :

mySet.has(someVal);

Kommer tillbaka true om someVal visas i uppsättningen, false annars.

Rensa en uppsättning

Du kan ta bort alla element i en uppsättning med .clear() :

mySet.clear();

Få inställd längd

Du kan få antalet element i uppsättningen med egenskapen .size

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

Den här egenskapen, till skillnad från Array.prototype.length , är skrivskyddad, vilket innebär att du inte kan ändra den genom att tilldela något till den:

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

I strikt läge kastar det till och med ett fel:

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

Konvertera uppsättningar till matriser

Ibland kan du behöva konvertera en uppsättning till en matris, till exempel för att kunna använda Array.prototype metoder som .filter() . Array.from() eller destructuring-assignment Array.from() för att göra det:

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

Nu kan du filtrera matrisen så att den bara innehåller jämna siffror och konverterar den tillbaka till Set med Set constructor:

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

mySet innehåller nu bara jämna siffror:

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

Korsning och skillnad i uppsättningar

Det finns inga inbyggda metoder för korsning och skillnad i uppsättningar, men du kan ändå uppnå det men omvandla dem till matriser, filtrera och konvertera tillbaka till uppsättningar:

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}

Iterating Sets

Du kan använda en enkel for-of-loop för att iterera en uppsättning:

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

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

Vid iterering över en uppsättning kommer det alltid att returnera värden i den ordning de först lades till i uppsättningen. Till exempel:

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]

Det finns också en .forEach() -metod, liknande Array.prototype.forEach() . Den har två parametrar, callback , som kommer att exekveras för varje element, och valfritt thisArg , som kommer att användas som this vid exekvering av callback .

callback har tre argument. De två första argumenten är båda det aktuella elementet i Set (för konsistens med Array.prototype.forEach() och Map.prototype.forEach() ) och det tredje argumentet är Set själv.

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow