카테고리 없음

자바 스크립트 2주 5~6강 - map , set

8나지 2024. 4. 23. 11:28

객체와 배열의 한계 극복 ; 자료구조 등장(=자료형태 array, obj, map, set)

; 데이터 구성, 검색, 사용을 효율적

api = method?

 

1. map : 키-벨류페어 저장

; (무조건 문자형태의 글자가 들어왔던) 객체와 다르게 키에 어떤 유형도 다 들어올 수 있음

; map 은 키가 정렬된 순서로 저장되기 때문 (db를 차용한 느낌??)

; 검색, 삭제, 완전한 제거, 여부 확인 등 제공

 

const mymap = new map();

{   키-벨류페어 넣던 오브젝트 name:'hong' 과 달리

}

const mymap = new map();

mymap.set('key', 'value');

 

나중에 검색 시 mymap.get('key') 로 찾아주기 ; get, set은 세트 & 항상 페어

 

사용이유 :대량데이터; 처리 반복이 중요; 반복을 위한 방법(keys,values, entries)

; for ~ of 데이터 순회 처리

keys, values, entries -어떤 형태를 가지고 있길래 for ~ of 형태를 가질 수 있는가

   요 3가지는 다 iterator(반복자) 을 가지고 있으므로 ; 하나씩 순회하며 처리할 수 있게끔

 

map 저장시 ; keys, valuepair 로 저장

저장 시 set('키s','벨류s') => '키'들로 이뤄진 iterator(반복자) 가 나옴 ; 벨류도 마찬가지

=> [키로 구성된 이터레이터], [벨류로 구성된 이터레이터]

for ~ [of]

for ~ [of] 로 하나씩 돌리며 반복문을 쓸 수 있음 => 맵 장점

 

one 이라는 키로 숫자 1저장 ... 3까지 / ⬆️ for of 돌리기 전 타입 확인해보니 [map iterator] 값 나옴

 

for (const  키워드 변수명 ) =>

*key*

for (const key of myMap.keys()) {               키가 하나씩 돌아가며       결과 one

   console.log(key);                                        출력할 것                               two

}                                                                                                                     three

*value*

for (const value of myMap.values()) {                                                   1

     console.log(value);                                                                            2

}                                                                                                                 3

*entry*

      console.log(mymap.entries());              한다면,, ()안에 있던 걸 다 배열로 묶어서 이터레이터로 감쌈 

                                                                         결과 [mymap.entries]   {['one',1],['two',2],['three',3]} =>for of 가능

for (const entry of myMap.entries()) {                                              ['one', 1]                                                

      console.log(entry);                                                                       ['two', 2]

}                                                                                                            ['three', 3]

 

map 크기, 존재여부 확인방법

console.log(mymap.size);                - 사이즈, 길이     결과 3   - 그림의 mymap.set("one",1); 부터 아래로 총 3개 있음

console.log(mymap.has("two"));    - key 기반 검색          true - two가 있는지? 에 대한 대답 

 

new Map()  – 맵을 만듭니다.

map.set(key, value)  –  key 를 이용해 value 를 저장합니다.

map.get(key)  –  key 에 해당하는 값을 반환합니다.  key 가 존재하지 않으 면 undefined 를 반환합니다.

map.has(key)  –  key 가 존재하면 true , 존재하지 않으면 false 를 반환합니다.

map.delete(key)  –  key 에 해당하는 값을 삭제합니다.

map.clear()  – 맵 안의 모든 요소를 제거합니다.


2. set

map과 같이 자료구조중 하나

map과 다른 점 : 고유한 값 저장함, 값만 저장, 키를 저장하지 않음, 값이 중복되지 않는 유일한 요소

값 추가, 검색, 삭제, 모든 값 제거, 존재여부 확인

 

집합 처럼 생각 ; 집합이란 아무데서나 넣으면 들어감, 중복 안되므로 중복일시 합쳐짐

const myset = new set ();

myset.add('value1');                        map과 달리 add, 키가 아니므로 value1

myset.add('value2');                         map 키, 벨류 세팅 set 벨류만 세팅

myset.add('value2');

 

console.log(myset,size);                  2       - value2가 2개 이므로 중복되어 2개

 

map.has(key) 처럼 존재하는지 확인하려면

console.log(myset.has("value1"));              true

console.log(myset.has("value3"));              false

 

반복할 때 map의  와 다르게                                     /     set에서는

for (const value of myMap.values()) {                /  for(const value of my set.values())  {                                        

     console.log(value);                                          /  console.log(value);                               

}                                                                              /   }

// 교집합(intersection)은 아래처럼 시뮬레이션 가능합니다.
const intersection = new Set([...mySet1].filter((x) => mySet2.has(x)));

// 차집합(difference)은 아래처럼 시뮬레이션 가능합니다.
const difference = new Set([...mySet1].filter((x) => !mySet2.has(x)));

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Set

 

Set - JavaScript | MDN

Set 객체는 원시값이나 객체 참조 값 등 모든 유형의 고유 값을 저장할 때 사용할 수 있습니다.

developer.mozilla.org


문제 

sort 오름차순