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.
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