본문 바로가기
JavaScript

[JavaScript] Map/Set

by 잘노는 주인장 2023. 11. 8.

Map 과 Set 은 ES2015에서 새롭게 추가된 자료구조들이다.

Map 은 객체와 유사하고 Set 은 배열과 유사하다고 생각하면 된다.

 

const m = new Map();

m.set('a','b'); // set(키,값)으로 Map에 속성 추가
m.set(3,'c'); // 문자열이 아닌 값을 키로 사용 가능
const d = {};
m.set(d,'e'); // 객체도 가능

m.get(d); //get(키) 로 속성값 조호;
console.log(m.get(d)); // e

m.size; // size로 속성 개수 조회
console.log(m.size); // 3

for (const[k,v] of m) { //반복문에 바로 넣어 사용 가능
	console.log(k,v); // 'a', 'b', 3, 'c', {}, 'e'
} // 속성간 순서도 보장

m.foreach((v,k) => { // foreach도 사용 가능
	console.log(k,v) // 결과는 위와 동일
});

 

속성값을 불러올때 같은 값을 사용하면 불러올 수 있다.

이때 조심해야할것은 키값이 객체일때다!

{a: 'b'} !== {a: 'b'}
=> true

위처럼 같아보인다고 같지 않으므로 

const obj = {key: 'key'};
m.set(obj,123);

m.get(obj);

맵에서 객체를 키값으로 사용할 경우 객체를 선언한 후 사용해야한다.

 

 

m.has(d); // has(키)로 속성 존재 여부를 확인
console.log(m.has(d)); // true

m.delete(d); // delete(키)로 속성을 삭제
m.clear(); // clear()로 전부 제거

 

 

 

Set은 배열과 비슷하지만, 중복을 허용하지 않는다.

const s = new Set();

s.add(1); // {1}
s.add(1); // {1}
s.add(2); // {1,2}
s.add('1'); // {1,2,'1'}

// 완전 같은 값은 중복되지않는다 (같은 타입)

 

그래서 중복이면 안되는 배열 또는 기존 배열이 있고 중복을 제거하고싶을때 쓴다.

const arr = [1,2,3,2,3,5,2];
const s2 = new Set(arr);

console.log(s2); // {1,2,3,5}
Array.from(s2); // [1,2,3,5]