본문 바로가기
JS

JavaScript Set

by spare8433 2023. 2. 14.

Set


Set 객체는 자료형에 관계 없이 원시 값과 객체 참조 모두 유일한 값을 저장할 수 있습니다.

Set 객체는 값 콜렉션으로, 삽입 순서대로 요소를 순회할 수 있습니다. 하나의 Set 내 값은 한 번만 나타날 수 있습니다. 즉, 어떤 값은 그 Set 콜렉션 내에서 유일합니다.

NaNundefinedSet에 저장할 수 있습니다. 원래 NaN !== NaN이지만, Set에서 NaNNaN과 같은 것으로 간주됩니다.


생성자


Set()
Set([1, 3, '1', { a:0, b:1, c:2}])

관련 속성


// 값들의 수량 리턴
.size

관련 메서드


// val 값을 추가한 set 객체 리턴
.add(val)

// val 값을 삭제 하고 삭제성곡 여부를 boolean 으로 리턴함
.delete(val)

// 모든 속성 지움
.clear()

// val 이 존재하는지 여부를 boolean 으로 리턴함
.has(val)

반복


// 순서대로 항목을 (콘솔에) 기록: 1, "some text", {"a": 1, "b": 2}
for (let item of mySet) console.log(item);

// 순서대로 항목을 기록: 1, "some text", {"a": 1, "b": 2}
// `keys()` 메서드는 values() 메서드의 별칭입니다.
for (let item of mySet.keys()) console.log(item);

// 순서대로 항목을 기록: 1, "some text", {"a": 1, "b": 2}
for (let item of mySet.values()) console.log(item);

// 순서대로 항목을 기록: 1, "some text", {"a": 1, "b": 2}
for (let [key, value] of mySet.entries()) console.log(key);

// forEach로 set 항목 반복
// forEash(fn(currentValue, currentKey, set))
mySet.forEach(function(value) {
  console.log(value);
});

Array 와 관계 및 기타


var myArray1 = ['value1', 'value2', 'value3'];

// Array를 Set으로 변환하기 위해서는 정규 Set 생성자 사용
var mySet1 = new Set(myArray1);

// Set 객체를 배열 객체로 변환 (Array.from으로)
var myArray2= Array.from(mySet1);

// 간단하게
[...mySet1]

// 교집합은 다음으로 간단하게 흉내(simulate)낼 수 있음
var intersection = new Set([...set1].filter(x => set2.has(x)));

// 차집합은 다음으로 간단하게 흉내낼 수 있음
var difference = new Set([...set1].filter(x => !set2.has(x)));

기본 집합 연산 구현


Set.prototype.isSuperset = function(subset) {
    for (var elem of subset) {
        if (!this.has(elem)) {
            return false;
        }
    }
    return true;
}

Set.prototype.union = function(setB) {
    var union = new Set(this);
    for (var elem of setB) {
        union.add(elem);
    }
    return union;
}

Set.prototype.intersection = function(setB) {
    var intersection = new Set();
    for (var elem of setB) {
        if (this.has(elem)) {
            intersection.add(elem);
        }
    }
    return intersection;
}

Set.prototype.difference = function(setB) {
    var difference = new Set(this);
    for (var elem of setB) {
        difference.delete(elem);
    }
    return difference;
}

//Examples
var setA = new Set([1, 2, 3, 4]),
    setB = new Set([2, 3]),
    setC = new Set([3, 4, 5, 6]);

setA.isSuperset(setB); // => true
setA.union(setC); // => Set [1, 2, 3, 4, 5, 6]
setA.intersection(setC); // => Set [3, 4]
setA.difference(setC); // => Set [1, 2]

참고

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set

'JS' 카테고리의 다른 글

JavaScript 내장 객체 Map  (0) 2023.02.17
JS 내장객체 Array 메서드 정리  (0) 2023.02.16
유사 배열 객체와 반복 작업  (0) 2022.08.26
웹팩과 번들러  (0) 2022.04.12
promise 와 async & await  (0) 2022.03.02