Set
Set 객체는 중복되지 않는 유일한 값들의 집합set이다. Set 객체는 배열과 유사하지만 다음과 같은 차이가 있다.
- 배열과 달리 동일한 값을 중복하여 포함할 수 없다.
- 요소 순서에 의미가 없다.
- 인덱스로 요소에 접근할 수 없다.
이러한 Set 객체의 특성은 수학적 집합 1의 특성과 일치한다. Set은 수학적 집합을 구현하기 위한 자료구조다.
따라서 Set을 통해 교집합, 합집합, 차집합, 여집합 등을 구현할 수 있다.
// Set 객체는 Set 생성자 함수로 생성한다
const set = new Set([1, 2, 3]);
console.log(set);
// set의 사이즈 확인
console.log(set.size);
// set의 요소가 존재하는지 확인
console.log(set.has(2));
console.log(set.has(6));
// set은 iteration protocal을 따르기때문에 연산자(for...of, spread)들을 사용할 수 있다.
set.forEach((item) => console.log(item));
// 위아래 다 가능
for (const value of set.values()) {
console.log(value);
}
// 추가
set.add(6);
console.log(set);
set.add(6); // 배열과 달리 중복되지 않음을 확인할 수 있다.
console.log(set);
// 삭제
set.delete(6);
console.log(set);
// 전부 삭제
set.clear();
console.log(set);
// 오브젝트 세트
const obj1 = { name: "🍎", price: 8 };
const obj2 = { name: "🍌", price: 5 };
const objs = new Set([obj1, obj2]);
console.log(objs);
간단퀴즈
// 퀴즈 -> object의 shallow copy
obj1.price = 10;
objs.add(obj1);
console.log(objs);
// 퀴즈
const obj3 = { name: "🍌", price: 5 };
// 내용값이 같더라도 객체가 저장된 주소가 다르므로, 중복같아보여도 중복이 아니다.
// 그러므로 추가할 수 있다.
objs.add(obj3);
console.log(objs);
obj3.price = 8;
console.log(objs);
Map
Map 객체는 키와 값의 쌍으로 이루어진 컬렉션이다. Map 객체는 객체와 유사 4하지만 다음과 같은 차이가 있다.
- Map은 key, value로 이루어진 자료구조이다.
- set과 마찬가지로 순서가 중요하지않다.
- key만 다르다면 같은 value가 중복가능하다.
- key가 고유한 아이디이므로 key를 이용해서 접근, 추가, 수정, 삭제가 가능하다.
- object와 Map의 구조상의 차이는 별로 없지만, 빌트인함수가 다르다는 것을 알 수 있다.
// Map 객체는 Map 생성자 함수로 생성한다.
const map = new Map([
["key1", "🍎"],
["key2", "🍌"],
]);
console.log(map);
// 사이즈 확인
console.log(map.size);
// 존재하는지 확인
console.log(map.has("key1"));
console.log(map.has("key6"));
// 순회
map.forEach((value, key) => console.log(key, value));
console.log(map.keys());
console.log(map.values());
console.log(map.entries());
// 찾기
console.log(map.get("key1"));
console.log(map.get("key2"));
console.log(map.get("key4"));
// 추가
map.set("key3", "🥝");
console.log(map);
// 삭제
map.delete("key3");
console.log(map);
// 전부삭제
map.clear();
console.log(map);
// 오브젝트와의 큰 차이점??
const key = { name: "milk", price: 10 };
const milk = { name: "milk", price: 10, description: "맛있는우유" };
const obj = {
[key]: milk,
};
console.log(obj);
const map2 = new Map([[key, milk]]);
console.log(map2);
console.log(obj[key]);
console.log(map2[key]); // <-객체처럼 동적인 접근불가
console.log(map2.get(key)); // <-Map은 동적으로 접근하려면 이렇게 접근해야함
간단퀴즈
// 주어진 배열에서 중복을 제거 하라
const fruits = ['🍌', '🍎', '🍇', '🍌', '🍎', '🍑'];
// ['🍌', '🍎', '🍇', '🍑']
function removeDuplication(array) {
return [...new Set(array)];
}
console.log(removeDuplication(fruits));
// 주어진 두 세트의 공통된 아이템만 담고 있는 세트 만들어라
const set1 = new Set([1, 2, 3, 4, 5]);
const set2 = new Set([1, 2, 3]);
function findIntersection(set1, set2) {
return new Set([...set1].filter((item) => set2.has(item)));
}
console.log(findIntersection(set1, set2));
'자바스크립트 개념정리' 카테고리의 다른 글
DOM 정리 (0) | 2022.12.06 |
---|---|
Symbol type(ES6) (0) | 2022.12.04 |
Iterator&Generator (0) | 2022.12.02 |
자료구조(data structure) (0) | 2022.11.29 |
내장객체(Built-in Objects) (0) | 2022.11.28 |