Set 객체는 자료형에 상관없이 유일한 값을 저장할 수 있습니다.
Set 객체는 ES2015 문법 이후 JavaScript 내장객체로 포함되어 사용가능합니다.
각종 배열과 관련된 문제를 해결할 때 Set객체를 활용하면 보다 간결하게 코드를 작성할 수 있습니다.
const set = new Set([1,2,3,4,5]);
set.has(1) // true
set.has(6) // false
set.add(7); // 추가
set.add(7); // 동일값이 있기 때문에 추가 되지 않습니다.
set.size // 6
set.delete(5);
set.has(5); // false
// set 내 모든 항목 조회
for (let item of set) console.log (item);
// 아래와 같이 사용가능
for (let item of set.keys()) console.log (item);
for (let item of set.values()) console.log (item);
for (let [key,value] of set.entries()) console.log(value);
myset = new Set([1,2,3,4,]);
let arr = [...set]; // [1,2,3,4]
let set1 = new Set([1,2,3,4]);
let set2 = new Set([3,4,5,6]);
// 교집합
var intersection = new Set([...set1].filter( x => set2.has(x))); //3,4
// 차집합
var difference = new Set([...set1].filter( x => !set2.has(x))); // 1,2
var difference2 = new Set([...set2].filter( x => !set1.has(x))); // 5,6
Set.prototype.isSuperset = function(subset) {
for (let elem of subset) {
// 포함되지 않은 항목이 하나라도 있을 경우 포함관계가 아니다
if (!this.has(elem)) return false;
}
return true;
}
const setA = new Set([1,2,3,4]);
const setB = new Set([1,2,8]);
const setC = new Set([1,2]);
setA.isSuperset(setB); // false
setA.isSuperset(setC); // true
Set.prototype.union = function(setB) {
let union = new Set(this);
for (let elem of setB) union.add(elem);
return union;
}
const setA = new Set([1,2,3,4]);
setA.union(new Set([1,2,4,5])); // [1,2,3,4,5]
// 교집합
Set.prototype.intersection = function(setB) {
let intersection = new Set();
for (let elem of setB) {
//기존 객체에 존재할 경우 intersection 객체에 추가한다.
if (this.has(elem)) intersection.add(elem);
}
return intersection;
}
const setA = new Set([1,2,3,4]);
const setB = new Set([2,3]);
setA.intersection(setB); //2,3
// 차집합
Set.prototype.difference = function(setB) {
let difference = new Set(this);
// 원 객체에서 동일한 키 값을 삭제하여 다른 값만 남도록
for (let elem of setB) {
difference.delete(elem);
}
return difference;
}
const setA = new Set([1,2,3,4]);
const setB = new Set([2,3]);
setA.difference(setB); //1,4
// 무작위로 입력 받은 값들중 최대 값을 출력하시오.
// 값은 배열로 제공되며 중복된 값이 존재합니다.
// input : [1,1,1,2,3,11,3,4,5,3,4] , output : 11
const input = [1,1,1,2,3,11,3,4,5,3,4];
const set = [...new Set(input)]; // Set 객체를 사용하여 중복 값 제거
let maxVal = -1;
set.forEach(value => {
if (maxVal<value) maxVal = value;
});
// 문제 : 중복된 항목의 배열이 주어진다. 고유한 값을 가진 항목의 수를 구하시오
// input : [1,1,2,3,4,4,5,1], output : [1,2,3,4,5] => 5개
//Map
function solution(nums) {
var answer = 0;
let map = new Map();
for (let i =0; i < nums.length; i++) {
if (!map.has(nums[i])) answer++;
map.set(nums[i]);
}
return answer;
}
//Set을 사용할 경우 2줄!!
function solution(nums) {
const set = new Set([...nums]);
return set.size;
}