Frontend Study - 2/Javascript

Javascript : 자료구조 중 Set & Map.

갓데미 2022. 10. 25. 16:31

Size와 Delete 사용이 🍡

 

Set

Set는 값들의 집합이다. 특징은 순서가 없고 중복이 불가하는 것이다.

특정 값은 Set내에서 하나씩만 존재하게 된다. 

 

배열 내의 중복을 없애기 위해 쓰이곤 한다. 

 

생성

 

let mySet = new Set([1,2,3]);

//배열 형식으로 넣어주어야 한다.
//기본 숫자나 스트링 값은 들어가지 않는다. new Set(1,2,3) <-- 안됨 X

//기존의 배열을 넣을 수도 있다. 

const array = [1,2,3];
const newSet = new Set(array);

 

기본 동작


const mySet = new Set([1,2,3])


mySet.size  // 3 - 크기 몇개가 들어있는지

mySet.has(2) // true - 이걸 가지고 있는지 없는지 true/false

mySet.forEach(item => console.log(item)) // 1,2,3 순회 가능.

mySet.add(4) // 1,2,3,4 추가된다. 중복요소를 추가하면 무시된다. 

mySet.delete(4) // 1,2,3 삭제된다.

mySet.clear() // 모두 삭제

 

배열과 set의 비교

 

배열과 set은 상호 변환된다.

new Array(mySet) 으로 배열 변환 가능. 

 

가장 큰 차이점은 중복이 불가 하다는 것. 

그리고 배열내에 '특정 요소'의 핸들링에 관한 것. 

특정요소가 배열에 존재 하는지 확인 할 때 indexOf 메서드를 사용하는 것은 효율적이지 못하다. 해당요소의 순서를 찾아서 배열에서 잘라내야 하는 과정보다 직접 해당 요소를 delete("해당요소") 해버릴 수 있어 편하다. 

 

Map

키와 값을 서로 연결(매핑)시켜 저장. 저장된 순서대로 각 요소들을 반복적으로 접근할 수 있도록 한다.

set이 중복을 제거하기 위해 가끔 등장하는 반면 Map의 사용에 대해서는 사실 감이 잡히지 않는다.

 

Object와 매우 유사하기 때문에 굳이 Map을 써야하나 싶었는데,

공부해보니 차이점이 존재하고, 어떤 부분에서는 Map이 더 유용하게 쓰일 수 있다. 

 

생성

const myMap = new Map([
	['key1', '사과'],
	['key2', '바나나'],
])

console.log(myMap) // {'key' => '사과', 'key2' => '바나나'}

or

const myMap = new Map();
myMap.set("key1", "사과");
myMap.set("key2", "바나나");

console.log(myMap) // {'key' => '사과', 'key2' => '바나나'}

 

기본 동작

 

const myMap = new Map();
myMap.set("key1", "사과");
myMap.set("key2", "바나나");

myMap.size; // 2 - 개수. 

myMap.get("key1"); // 사과 - key로 value 찾기

myMap.has("key2"); // true - 키 값이 있는지 true/false

myMap.delete("key1"); // key1값 삭제

myMap.forEach((ele) => console.log(ele)); // 바나나 - 값이 순회된다.

MDN

 

Object와 Map의 비교

  • Object의 키는 Strings 이며, Map의 키는 모든 값을 가질 수 있다.
  • Object는 크기를 수동으로 추적해야하지만, Map은 크기를 쉽게 얻을 수 있다.
  • Map은 삽입된 순서대로 반복된다.

Object 혹은 Map중에 어느 것을 사용할지를 결정하는데 도움을 줄 두가지 팁이 있다:

  • 실행 시까지 키를 알수 없고, 모든 키가 동일한 type이며 모든 값들이 동일한 type일 경우에는 objects를 대신해서 map을 사용.
  • 각 개별 요소에 대해 적용해야 하는 로직이 있을 경우에는 objects를 사용.

 

참고사이트

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Keyed_collections