JavaScript Set och WeakSet

I denna handledning lär du dig om JavaScript-set och WeakSets med hjälp av exempel.

JavaScript ES6 har introducerat två nya datastrukturer, dvs Setoch WeakSet.

Uppsättningen liknar en matris som låter oss lagra flera objekt som siffror, strängar, objekt etc. Men till skillnad från en matris kan en uppsättning inte innehålla dubbla värden.

Skapa JavaScript-uppsättning

För att skapa en Setmåste du använda new Set()konstruktören. Till exempel,

 // create Set const set1 = new Set(); // an empty set console.log(set1); // Set () // Set with multiple types of value const set2 = new Set((1, 'hello', (count : true))); console.log(set2); // Set (1, "hello", (count: true))

När dubbla värden skickas till ett Setobjekt utesluts dubblettvärdena.

 // Set with duplicate values const set3 = new Set((1, 1, 2, 2)); console.log(set3); // Set (1, 2)

Åtkomst till setelement

Du kan komma åt Setelement med values()metoden och kontrollera om det finns ett element inuti med Sethjälp av has()metoden. Till exempel,

 const set1 = new Set((1, 2, 3)); // access the elements of a Set console.log(set1.values()); // Set Iterator (1, 2, 3)

Du kan använda has()metoden för att kontrollera om elementet finns i en uppsättning. Till exempel,

 const set1 = new Set((1, 2, 3)); // check if an element is in Set console.log(set1.has(1));

Lägga till nya element

Du kan lägga till element i en uppsättning med add()metoden. Till exempel,

 const set = new Set((1, 2)); console.log(set.values()); // adding new elements set.add(3); console.log(set.values()); // adding duplicate elements // does not add to Set set.add(1); console.log(set.values());

Produktion

 Set Iterator (1, 2) Set Iterator (1, 2, 3) Set Iterator (1, 2, 3)

Ta bort element

Du kan använda clear()och och delete()metoden för att ta bort element från en uppsättning.

Den delete()metod tar bort ett specifikt element från en Set. Till exempel,

 const set = new Set((1, 2, 3)); console.log(set.values()); // Set Iterator (1, 2, 3) // removing a particular element set.delete(2); console.log(set.values()); // Set Iterator (1, 3)

Den clear()metod tar bort alla element från en Set. Till exempel,

 const set = new Set((1, 2, 3)); console.log(set.values()); // Set Iterator (1, 2, 3) // remove all elements of Set set.clear(); console.log(set.values()); // Set Iterator ()

Iterera uppsättningar

Du kan iterera genom Set-elementen med metoden for … of loop eller forEach (). Elementen nås i införingsordningen. Till exempel,

 const set = new Set((1, 2, 3)); // looping through Set for (let i of set) ( console.log(i); )

Produktion

 1 2 3

JavaScript WeakSet

WeakSet liknar en uppsättning. WeakSet kan dock bara innehålla objekt medan en uppsättning kan innehålla alla datatyper som strängar, siffror, objekt etc. Till exempel,

 const weakSet = new WeakSet(); console.log(weakSet); // WeakSet () let obj = ( message: 'Hi', sendMessage: true ) // adding object (element) to WeakSet weakSet.add(obj); console.log(weakSet); // WeakSet ((message: "Hi", sendMessage: true))

När du försöker lägga till andra datatyper förutom objekt kastar WeakSet ett fel. Till exempel,

 // trying to add string to WeakSet weakSet.add('hello'); // throws error // TypeError: Attempted to add a non-object key to a WeakSet console.log(weakSet);

WeakSet-metoder

WeakSets har metoder add(), delete()och has(). Till exempel,

 const weakSet = new WeakSet(); console.log(weakSet); // WeakSet () const obj = (a:1); // add to a weakSet weakSet.add(obj); console.log(weakSet); // WeakSet ((a: 1)) // check if an element is in Set console.log(weakSet.has(obj)); // true // delete elements weakSet.delete(obj); console.log(weakSet); // WeakSet ()

WeakSets är inte iterabla

Till skillnad från uppsättningar är WeakSets inte iterabla. Till exempel,

 const weakSet = new WeakSet((a:1)); // looping through WeakSet for (let i of weakSet) ( // TypeError console.log(i); )

Matematiska uppsättningar

I JavaScript tillhandahåller Set inte inbyggda metoder för att utföra matematiska operationer som union, korsning, skillnad etc. Vi kan dock skapa program för att utföra dessa operationer.

Exempel: Ställ in Union Operation

 // perform union operation // contain elements of both sets function union(a, b) ( let unionSet = new Set(a); for (let i of b) ( unionSet.add(i); ) return unionSet ) // two sets of fruits let setA = new Set(('apple', 'mango', 'orange')); let setB = new Set(('grapes', 'apple', 'banana')); let result = union(setA, setB); console.log(result);

Produktion

 Set ("äpple", "mango", "apelsin", "druvor", "banan")

Exempel: Ställ in korsning

 // perform intersection operation // elements of set a that are also in set b function intersection(setA, setB) ( let intersectionSet = new Set(); for (let i of setB) ( if (setA.has(i)) ( intersectionSet.add(i); ) ) return intersectionSet; ) // two sets of fruits let setA = new Set(('apple', 'mango', 'orange')); let setB = new Set(('grapes', 'apple', 'banana')); let result = intersection(setA, setB); console.log(result);

Produktion

 Set ("äpple")

Exempel: Ställ in skillnad

 // perform difference operation // elements of set a that are not in set b function difference(setA, setB) ( let differenceSet = new Set(setA) for (let i of setB) ( differenceSet.delete(i) ) return differenceSet ) // two sets of fruits let setA = new Set(('apple', 'mango', 'orange')); let setB = new Set(('grapes', 'apple', 'banana')); let result = difference(setA, setB); console.log(result);

Produktion

 Set ("mango", "orange")

Exempel: Ställ in delmängd

 // perform subset operation // true if all elements of set b is in set a function subset(setA, setB) ( for (let i of setB) ( if (!setA.has(i)) ( return false ) ) return true ) // two sets of fruits let setA = new Set(('apple', 'mango', 'orange')); let setB = new Set(('apple', 'orange')); let result = subset(setA, setB); console.log(result);

Produktion

 Sann

JavaScript Setsoch WeakSetsintroducerades i ES6 . Vissa webbläsare stöder kanske inte deras användning. Om du vill veta mer besöker du JavaScript Sets support och JavaScript WeakSets support.

Intressanta artiklar...