JavaScript - tutorial - 24 - set

revision:


Content

A JavaScript Set is a collection of unique values Syntax Set methods Iterating Set object Set object examples


A JavaScript Set is a collection of unique values

top

The "Set" constructor lets create Set objects that store unique values of any type, whether primitive values or object references. The prototype of the objects created with the Set constructor have a lot of methods that can be used.

Set methods

new Set() - creates a new set.
add() - adds a new element to the set.
delete() - removes an element from a set.
has() - returns true if a value exists.
clear() - removes all elements from a set.
forEach() - invokes a callback for each element.
values() - returns an Iterator with all the values in a set.
keys() - same as values().
entries() - returns an Iterator with the [key,value] pairs from a set.

Set property

size - returns the number of elements in a set. "set.size" gives the element counts in the Set object.


Syntax

top

A JavaScript Set can be created by:

1/ passing an array to a new Set(),
2/ creating a "new Set" and using add() to add values,
3/ creating a "new Set" and using add() to add variables.

- create instance of set using new Set() ; example: let setObject = new Set().

- initialize the set with an array of values ; example: let setObject = new Set(["Audi","Bentley","BMW"]);.

- initialize the set with an array of variables ; example: let setObject = new Set([ a, b, c, d]);.

Sets are objects.


Set methods

top

The new Set() method

Examples

create a set : size : ; type :

add literal values : new size : ; type :

another way to add : new size : ; type :

code:
                    <div class="spec">
                        <p>create a set : size : <span id="set-1"></span>; type : <span id="set-2"><span</p>
                        <p>add literal values : new size : <span id="set-3"></span>; type : <span id="set-4"><span</p>
                        <p>another way to add : new size : <span id="set-5"></span>; type : <span id="set-6"><span</p>
                    </div>
                    <script>
                        // Create a Set
                        const letters = new Set(["a","b","c"]);
                        // Display set.size
                        document.getElementById("set-1").innerHTML = letters.size;
                        document.getElementById("set-2").innerHTML = typeof letters;
                        // add values to set 
                        letters.add("d");
                        letters.add("e");
                        letters.add("f");
                        document.getElementById("set-3").innerHTML = letters.size;
                        document.getElementById("set-4").innerHTML = typeof letters;
        
                        // Create Variables
                        const g = "g";
                        const h = "h";
                        const i = "i";
                        // Add the Variables to the Set
                        letters.add(g);
                        letters.add(h);
                        letters.add(i);
                        document.getElementById("set-5").innerHTML = letters.size;
                        document.getElementById("set-6").innerHTML = typeof letters;
                    </script>
              

The add() method inserts the new item at the end of the Set object.

If the item is already present in the collection,it simply does nothing. That's the main reason why set holds only unique values.This method returns the Set itself. If you add equal elements, only the first will be saved.

Examples

create a set : size : ; type :

add literal values : new size : ; type :

another way to add : new size : ; type :

code:
                    <div class="spec">
                        <p>create a set : size : <span id="set-7"></span>; type : <span id="set-8"><span</p>
                        <p>add literal values : new size : <span id="set-9"></span>; type : <span id="set-10"><span</p>
                        <p>another way to add : new size : <span id="set-11"></span>; type : <span id="set-12"><span</p>
                            <p id="demo"></p>
                    </div>
                    <script>
                        // Create a new Set
                        const letters_c = new Set(["a","b","c"]);
                        document.getElementById("set-7").innerHTML = letters_c.size;                
                        document.getElementById("set-8").innerHTML = typeof letters_c; 
                        // Add a new Element
                        letters_c.add("d");
                        letters_c.add("e");
                        letters_c.add("f");
                        letters_c.add("d");
                        letters_c.add("g");
                        // Display set.size
                        document.getElementById("set-9").innerHTML = letters_c.size;                
                        document.getElementById("set-10").innerHTML = typeof letters_c;                
                        // add more elements
                        letters_c.add("p");
                        letters_c.add("a");
                        letters_c.add("q");
                        document.getElementById("set-11").innerHTML = letters_c.size;                
                        document.getElementById("set-12").innerHTML = typeof letters_c; 
                    </script>
                

The delete() method removes the specified value present in the Set object.

It returns true if the specified value is successfully deleted from the object, otherwise false.

Examples

size : ; type :

new size : ; type :

code:
                    <div class="spec">
                        <p> size : <span id="set-13"></span>; type : <span id="set-14"><span</p>
                        <p> new size : <span id="set-15"></span>; type : <span id="set-16"><span</p>
                    
                    </div>
                    <script>
                    const setMusic = new Set(["Beethoven", "Chopin","Mozart", "Bach", "Me"]);
                    document.getElementById("set-13").innerHTML = setMusic.size;
                    document.getElementById("set-14").innerHTML = typeof setMusic;
                    setMusic.delete("Beethoven")
                    document.getElementById("set-15").innerHTML = setMusic.size;
                    document.getElementById("set-16").innerHTML = typeof setMusic;
                    </script>
                

The has() method returns true if the value is present in the object, otherwise returns false.

Examples

size : ; type :

has? : ; type :

code:
                    <div class="spec">
                        <p> size : <span id="set-17"></span>; type : <span id="set-18"><span</p>
                        <p> has? : <span id="set-19"></span>; type : <span id="set-20"><span</p>
                    </div>
                    <script>
                    const setMusicians = new Set(["Beethoven", "Chopin","Mozart", "Bach", "Me"]);
                    document.getElementById("set-17").innerHTML = setMusicians.size;
                    document.getElementById("set-18").innerHTML = typeof setMusicians;
                    res = setMusicians.has("Beethoven");
                    document.getElementById("set-19").innerHTML = res;
                    document.getElementById("set-20").innerHTML = typeof setMusicians;
                    </script>
                

The clear() method removes all the elements present in the Set object.

Examples

set size: ; after delete:

clear: ;

code:
                    <div class="spec">
                        <p> set size: <span id="set-21"></span>; after delete: <span id="set-22"><span</p>
                        <p> clear: <span id="set-23"></span>; <span id="set-24"><span</p>
                        
                    </div>
                    <script>
                        let setObject = new Set();
                    
                        setObject.add("Audi");
                        setObject.add("Bentley");
                        setObject.add("BMW");
                        setObject.add("Audi");
                        setObject.add("Honda");
                        setObject.add("RangeRover");
                        document.getElementById("set-21").innerHTML = setObject.size; //5 , ignores duplicate values
                        if(setObject.has("BMW")){
                                setObject.delete("BMW");
                                document.getElementById("set-22").innerHTML = "object size: " + setObject.size;   //4
                            }
                        setObject.clear();
                        document.getElementById("set-23").innerHTML = "object size: " + setObject.size;    //0
                        document.getElementById("set-24").innerHTML = "typeof: " + typeof setObject;    //0
                    </script>
                

The forEach() method invokes a function for each Set element.

Eexamples

code:
                    <div class="spec">
                        <p id="set_d"></p>
                    </div>
                    <script>
                        // Create a Set
                        const letters_d = new Set(["a","b","c"]);
                        // List all Elements
                        let text = "";
                        letters_d.forEach (function(value) {
                            text += value + "<br>";
                        })
                        document.getElementById("set_d").innerHTML = text;
                    </script>
                

code:
                    <div class="spec">
                        <p id="set-26"></p>
                        <p id="set-27"></p>
                    </div>
                    <script>
                        var set11 = new Set();
                        set11.add(10);
                        set11.add(20);
                        set11.add(30).add(40).add(50);
        
                        let text_b = "";
                        set11.forEach (function(value) {
                        text_b += value + "<br>";
                        })
                        document.getElementById("set-26").innerHTML = set11.size; 
                        document.getElementById("set-27").innerHTML = text_b;
                    </script>
                

The values() method returns an iterator object containing all the values in a Set.

Examples

code:
                    <div class="spec">
                        <p id="set-28"></p>
                    </div>
                    <script>
                        // Create a Set
                        const letters_e = new Set(["a","b","c"]);
                        // List all Elements
                        let txt = "";
                        for (const x of letters_e.values()) {
                        txt += x + "<br>";
                        }
                        document.getElementById("set-28").innerHTML = txt;
                    </script>
                

The entries() method returns [value,value] pairs instead of [key,value] pairs, as the "set" object has no keys.

This makes Sets compatible with Maps.

Examples

code:
                    <div class="spec">
                        <p id="set-29"></p>
                    </div>
                    <script>
                        // Create a Set
                        const letters_f = new Set(["a","b","c"]);
                        // List all entries
                        const iterator = letters_f.entries();
                        let text_a = "";
                        for (const entry of iterator) {
                            text_a += entry + "<br>";
                        }
                        document.getElementById("set-29").innerHTML = text_a;
                    </script>
                

Iterating Set object

top

We can iterate over "Set" using for..of loop. The iterators methods of Map are also supported by Set:

set.keys(): this method returns an iterable object for values.

set.values(): this method returns the same as set.keys(). Set has this method for maintaining the compatibility with Map.

Set has built in foreach method to iterate over set object.

Examples




code:
                        <div class="spec">
                            <p id="four"></p><br>
                            <p id="five"></p><br>
                            <p id="six"></p><br>
                            <p id="seven"></p>
                        </div>
            
                        <script>
                            let setObject_2 = new Set(["Audi","Bentley","BMW"]);
                            for(let value of setObject_2) {
                                    document.getElementById("four").innerHTML += value + ", ";
                                }
                            
                            let setObject_3 = new Set([1,5,'Audi',"a*1", "b=2"]);
                            for (let item of setObject_3.keys()) {
                                document.getElementById("five").innerHTML += item + ", ";
                                
                            }
                            for (let item of setObject_3.values()) {
                                document.getElementById("six").innerHTML += item + ", ";
                                }
                            new Set(["Audi","Bentley","BMW"]).
                            forEach(function(value) {
                                    document.getElementById("seven").innerHTML +=value + ", ";   
                                })
                        </script>
                

Set object examples

top

some examples

examples

Example

code:
                        <div class="spec">
                            <p id="ex-3"></p>
                            <p id="ex-4"></p>
                        </div>
                        <script>
                            // Performs intersection operation between called set and otherSet
                            Set.prototype.intersection = function(otherSet) {
                                // creating new set to store intersection
                                var intersectionSet = new Set();
                                // Iterate over the values
                                for(var elem of otherSet){
                                    // if the other set contains a similar value as of value[i] then add it to intersectionSet
                                    if(this.has(elem))
                                        intersectionSet.add(elem);
                                }
                            
                            // return values of intersectionSet
                            return intersectionSet;               
                            }
                            // using intersection function
                            // Declaring values for set1 and set2
                            var set1 = new Set([10, 20, 30, 40, 50]);
                            var set2 = new Set([40, 50, 60, 70, 80]); 
                            
                            // performing union operation and storing the resultant set in intersectionset
                            var intersectionSet = set1.intersection(set2);
                                
                            let text_c = "";
                            intersectionSet.forEach (function(value) {
                            text_c += value + "<br>";
                            })
                            document.getElementById("ex-3").innerHTML = intersectionSet.size;
                            document.getElementById("ex-4").innerHTML = text_c;
                            console.log(intersectionSet.values());
                        </script>
                    

Example








code:
                    <div class="spec">
                        <p id="eight"></p><br>
                        <p id="nine"></p><br>
                        <p id="ten"></p><br>
                        <p id="eleven"></p><br>
                        <p id="twelve"></p><br>
                        <p id="thirteen"></p><br>
                        <p id="fourteen"></p><br>
                    
                    </div>
                    <script>
                        const letteren = new Set(["e","f","g"]);
                        document.getElementById("eight").innerHTML = "array size: " + letteren.size;
                        letteren.add("h");
                        letteren.add("i");
                        letteren.add("j");
                        document.getElementById("nine").innerHTML = "array size: " + letteren.size;
                        const aa = "k";
                        const bb = "l";
                        const cc = "m";
                        letteren.add(aa);
                        letteren.add(bb);
                        letteren.add(cc);
                        document.getElementById("ten").innerHTML = "array size: " + letteren.size;
                        
                        letteren.add("o");
                        letteren.add("p");
                        document.getElementById("eleven").innerHTML = "array size: " + letteren.size;
            
                        let tekst = "";
                        letteren.forEach (function(value) {
                            tekst += value + ", ";
                        })
                        document.getElementById("twelve").innerHTML = tekst;
                        document.getElementById("thirteen").innerHTML = letteren.values();
                    
                        let tekst_a = "";
                        for (const x of letteren.values()) {
                            tekst_a += x + ", ";
                        }
                        document.getElementById("fourteen").innerHTML = tekst_a;
                    </script>
                

Github - Set object examples

exaqmples
set-prototype-@@iterator:
                    const set1 = new Set();
                    set1.add(42);
                    set1.add('forty two');
                    const iterator1 = set1[Symbol.iterator]();
                    console.log(iterator1.next().value);
                    // expected output: 42
                    console.log(iterator1.next().value);
                    // expected output: "forty two"
                
set-prototype-add:
                    const set1 = new Set();
                    set1.add(42);
                    set1.add(42);
                    set1.add(13);
                    for (let item of set1) {
                        console.log(item);
                        // expected output: 42
                        // expected output: 13
                    }                
                
set-prototype-clear:
                    const set1 = new Set();
                    set1.add(1);
                    set1.add('foo');
                    console.log(set1.size);
                    // expected output: 2
                    set1.clear();
                    console.log(set1.size);
                    // expected output: 0
                
set-prototype-constructor:
                    const set1 = new Set([1, 2, 3, 4, 5]);
                    console.log(set1.has(1));
                    // expected output: true
                    console.log(set1.has(5));
                    // expected output: true
                    console.log(set1.has(6));
                    // expected output: false
                
set-prototype-delete:
                    const set1 = new Set();
                    set1.add({ x: 10, y: 20 }).add({ x: 20, y: 30 });
                    // Delete any point with `x > 10`.
                    set1.forEach((point) => {
                        if (point.x > 10) {
                            set1.delete(point);
                        }
                    });
                    console.log(set1.size);
                    // expected output: 1
                
set-prototype-entries:
                    const set1 = new Set();
                    set1.add(42);
                    set1.add('forty two');
                    const iterator1 = set1.entries();
                    for (let entry of iterator1) {
                        console.log(entry);
                        // expected output: [42, 42]
                        // expected output: ["forty two", "forty two"]
                    }
                
set-prototype-foreach:
                    function logSetElements(value1, value2, set) {
                        console.log(`s[${value1}] = ${value2}`);
                    }
                    new Set(['foo', 'bar', undefined]).forEach(logSetElements);
                    // expected output: "s[foo] = foo"
                    // expected output: "s[bar] = bar"
                    // expected output: "s[undefined] = undefined"
                
set-prototype-has:
                    const set1 = new Set([1, 2, 3, 4, 5]);
                    console.log(set1.has(1));
                    // expected output: true
                    console.log(set1.has(5));
                    // expected output: true
                    console.log(set1.has(6));
                    // expected output: false
                
set-prototype-size:
                    const set1 = new Set();
                    const object1 = {};
                    set1.add(42);
                    set1.add('forty two');
                    set1.add('forty two');
                    set1.add(object1);
                    console.log(set1.size);
                    // expected output: 3
                
set-prototype-values:
                    const set1 = new Set();
                    set1.add(42);
                    set1.add('forty two');
                    const iterator1 = set1.values();
                    console.log(iterator1.next().value);
                    // expected output: 42
                    console.log(iterator1.next().value);
                    // expected output: "forty two"