객체와 배열의 한계 극복 ; 자료구조 등장(=자료형태 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
문제
sort 오름차순