map
javascript를 통해 객체나 배열 등 다양한 프로그램을 만들 수 있으나
복잡한 현실세계를 반영하긴다는 것은 어렵다
따라서 Map, Set 같은 추가적인 자료구조가 등장하였다.
array나 object에 비해 꽤 최근에 등장하였다.
Map, Set의 목적: 데이터의 구성, 검색, 사용을 기존의 객체 또는 배열보다 더 효율적으로 처리
key / value 객체처럼 key와 key의 값이 따라온다.
key에 어떤 데이터 타입도 다 들어올 수 있다.
Map은 key가 정렬된 순서로 저장되기 때문이다.
기능 - 검색, 삭제, 제거, 여부 확인
1-1. Map의 기본 구조
const myMap = new Map();
myMap.set('key', 'value'); // set메소드를 통해 key와 value의 데이터를 넣는다.
myMap.get('key'); // get메소드를 통해 key의 데이터를 검색한다.
// .set과 .get은 항상 pair다
1-2. 반복을 위한 메소드 method : keys(), values(), entries()
// 예시를 위한 변수 myMap
const myMap = new Map();
myMap.set('one', 1);
myMap.set('two', 2);
myMap.set('three', 3);
1-2-1. keys
console.log(myMap.keys());
// 실행 결과: [Map Iterator] { 'one', 'two', 'three' }
// myMap 변수의 key 들이 나온다.
// Iterator는 '반복자'라는 의미이다.
for (const key of myMap.keys()) {
console.log(key);
}
// 실행 결과:
// one
// two
// three
// for 반복문을 통해 변수 myMap의 key들을 출력하였다.
1-2-2. values
console.log(myMap.values());
// 실행 결과: [Map Iterator] { 1, 2, 3 }
// myMap 변수의 key 값들이 나온다.
for (const value of myMap.values()) {
console.log(value);
}
// 실행 결과:
// 1
// 2
// 3
// for 반복문을 통해 변수 myMap의 key 값value들을 출력하였다.
1-2-3. entries
console.log(myMap.entries());
// 실행 결과: [Map Entries] { [ 'one', 1 ], [ 'two', 2 ], [ 'three', 3 ] }
// 변수의 key와 key value를 배열의 형태로 묶어 출력한다. [key, key_value]
for (const myEntries of myMap.entries()) {
console.log(myEntries);
}
// 실행 결과:
// [ 'one', 1 ]
// [ 'two', 2 ]
// [ 'three', 3 ]
console.log(myMap.size); // map의 사이즈(길이)
// 실행 결과: 3
console.log(myMap.has("two")); //key 기반 검색
// 실행 결과: true (존재한다)
2. Set
고유한 값을 저장하는 자료구조다.
값만 저장하며, key는 저장하지 않는다.
값이 중복되지 않는 유일한 요소로만 구성된다.
값 추가, 검색, 값 삭제, 모든 값 제거, 존재 여부 확인을 목적으로 쓰인다.
// 예시를 위한 변수 mySet
const mySet = new Set();
mySet.add('value1');
mySet.add('value2');
mySet.add('value2');
// console.log(mySet.size);
// 실행 결과: 2
// 변수 mySet의 값value는 3개가 존재하지만 같은 값 'value2'가 2개 존재 하기 때문에
// 중복된 값은 제외한다. 따라서 mySet에 존재하는 값은 2개이다.
// console.log(mySet.has('value1')); // 실행 결과: ture
// console.log(mySet.has('value2')); // 실행 결과: ture
// console.log(mySet.has('value3')); // 실행 결과: false
// iterator 반복자
const mySet = new Set();
mySet.add('value1');
mySet.add('value2');
mySet.add('value3');
mySet.add('value4');
mySet.add('value5');
for( const value of mySet.values()) {
console.log(value);
}
// 실행 결과:
// value1
// value2
// value3
// value4
// value5