JS.코어 (map & set)

Vorhandenheit ·2021년 6월 18일
1

JS.코어

목록 보기
9/29
post-custom-banner

MAP & SET

MAP

키가 있는 데이터를 저장한다는 점, 객체와 유사
다만 키에 다양한 자료형을 허용한다는 점

  • new Map() : 맵을 만듬
  • map.set(key, value) : keyf를 이용해 value에 저장
  • map.get(key) : key에 해당하는 값을 반환, key가 존재하지않으면 undefined를 반환
  • map.has(key) : key가 존재하면 true, 존재하지 않으면 false를 반환
  • map.delete(key) : key에 해당하는 값을 삭제
  • map.clear() : 맵 안의 모든 요소를 제거합니다.
  • map.size : 요소의 개수를 반환합니다.

<map[key]는 Map을 쓰는 바른 방법이 아님>
이 방법은 map을 일반 객체처럼 취급하게 됨
따라서 map전용 메서드 set get등을 사용해야함

1.맵의 요소에 반복 작업하기

  • map.key() : 각 요소의 키를 모은 반복 가능한(iterable) 객체를 반환
  • map.value() : 각 요소의 값을 모은 이러터블 객체를 반환
  • map.entries() : 요소의[키, 값]을 한 쌍으로 하는 이터러블 객체를 반환, for..of 반복문 기초로 쓰임
let recipMap = new Map([
  ['cucumber', 500],
  ['tomatoes', 350],
  ['onion', 50]
]);

for (let vegetable of recipeMap.keys()) {
	alert(vegetable); //cucumber, tomatoes, onion
}

for (let amount of recipeMap.values()) {
	alert(amount); //500, 350, 50
}

for (let entry of recipeMap) {
	alert(entry) //cucumber, 500.....
}

<맵은 삽입순서를 기억함>
객체가 프로퍼티 순서를 기억하지못하는 것과 다르게, 맵은 값이 삽입된 순서대로 순회를 실시

Object.entries: 객체를 맵으로 바꾸기

각 요소가 키-값 쌍인 배열이나 이터러블 객체를 초기화 용도로 맵에 전달해 새로운 맵을 만들 수 있음
평범한 객체를 가지고 맵을 만들고 싶다면 내장 메서드 Object.entries(obj)를 활용해야함, 이 메서드는 객체의 키-값 쌍을 요소 ([key, value])로 가지는 배열을 만듬

let obj = {
	name: "John",
  	age: 30
};

let map = new Map(Object.entries(obj));
alert(map.get('name'));

object.entries를 사용해 객체 obj를 배열 [['name', 'john'],['age', 30]]으로 바꾸고, 이 맵을 이용해 새맵을 만듬

Object.fromEntries: 맵을 객체로 바꾸기

let prices = Object.fromEntries([
	['banana', 1],
    ['orange', 2],
	['meat', 4]
]);
//now prices = {banana: 1, orange: 2, meat: 4}

Set

중복을 허용하지 않는 값을 모아놓은 컬렉션, set에 키가 없는 값이 저장됨

  • new Set(iterable) : 셋을 만듬, 이터러블 객체를 전달받으면 그 안의 값을 복사해 셋에 넣어줌

  • set.add(value) : 값을 추가하고 셋 자신을 반환합니다,
    // 셋 내에 동일한 값이 있다면 set.add(value)를 해도 달라지지않음

  • set.delete(value) : 값을 제거합니다.호출 시점에 셋 내에 값이 있어서 제거에 성공하면 true, 아니면 false를 반환

  • set.has(value) : 셋 내에 값이 존재하면 true, 아니면 false를 반환

  • set.clear() : 셋을 비움

  • set.size() : 셋에 몇 개의 값이 있는지 세어줌

let set = new Set()
let john = {name : 'John'};
let pete = {name : 'Pete'};
let mary = {name;  'Mary'};

set.add(John);
set.add(Pete);
set.add(Mary);
set.add(John);

alert(set.size);

for (let user of set) {
	alert(user.name)l // John, Pete, Mary순으로 출력
}

중복 값 여부는 배열 메서드인 arr.find를 이용해 확인할 수도 있지만 이는 배열 내 요소 전체를 뒤져 중복 값을 찾기 때문에, 셋보다 성능 면에서 떨어짐

1.셋의 값에 반복 작업하기

for...of나 forEach를 사용하면 셋의 값을 대상으로 반복 작업을 수행할 수 있음

let set = new Set(['oranges', 'apples', 'bananas']);
for (let value of set) alert(value);

과제

1) 배열에서 중복 요소 제거하기

function unique(arr) {
	let answer =  new Set() 

}

2)애너그램 걸러내기

function aclean(arr) {


}

3)반복 가능한 객체의 키
```javascript
profile
읽고 기록하고 고민하고 사용하고 개발하자!
post-custom-banner

0개의 댓글