JavaScript - Set

125 阅读1分钟

Brief

The Set allow you to store unique values of any type(primitive values or object references).


Syntax

// iterable: iterable object
// If an iterable object is passed, all of its elements will be added into the new Set. 
// And null will be treated as undefined
new Set([iterable]) 
Special Case
new Set([NaN, NaN]);
// Set(1) {NaN}
// Although NaN !== NaN, NaN will be regarded as same in Set

Methods

const set = new Set();

// add
set.add(1);
set.add(2);
set.add(3);

// delete
set.delete(1); 

// clear
set.clear();

// has
set.has(1); // true

// keys
for (let item of mySet.keys()) console.log(item); // 2 3

// values
for (let item of mySet.values()) console.log(item); // 2 3

// entries
for (let [key, value] of mySet.entries()) console.log(key); // 2 3

// forEach
mySet.forEach((value) => {
   console.log(value);
}); // 2 3

Some Usages

function isSuperset(set, subset) {
    for (let elem of subset) {
        if (!set.has(elem)) {
            return false;
        }
    }
    return true;
}

function union(setA, setB) {
    let _union = new Set(setA);
    for (let elem of setB) {
        _union.add(elem);
    }
    return _union;
}

function intersection(setA, setB) {
    let _intersection = new Set();
    for (let elem of setB) {
        if (setA.has(elem)) {
            _intersection.add(elem);
        }
    }
    return _intersection;
}

function symmetricDifference(setA, setB) {
    let _difference = new Set(setA);
    for (let elem of setB) {
        if (_difference.has(elem)) {
            _difference.delete(elem);
        } else {
            _difference.add(elem);
        }
    }
    return _difference;
}

function difference(setA, setB) {
    let _difference = new Set(setA);
    for (let elem of setB) {
        _difference.delete(elem);
    }
    return _difference;
}