(Zoom Clone Coding) 카드 및 세트

지도

키로 데이터를 저장하는 방법 물체비슷하지만 핵심다른 데이터 유형을 허용한다는 점에서 다릅니다.

객체와 달리 맵은 키를 문자 유형으로 변환하지 않습니다. 키에 대한 데이터 유형 제한은 없습니다.

Map의 주요 메서드와 속성은 다음과 같습니다.

//맵 생성
new Map()

//맵에 key를 이용해 value를 저장
map.set(key, value)

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

//map에 key가 존재하면 true, 존재하지 않으면 false를 반환
map.has(key)

//map에서 key에 해당하는 값을 삭제
map.delete(key)

//맵 안의 모든 요소를 제거
map.clear()

//요소의 개수를 반환
map.size

지도는 객체를 키로 받아들입니다.

let Card = { name: "baki" };

// Card 사용 횟수를 세본다고 가정
let CountMap = new Map();

// Card를 맵의 키로 사용
CountMap.set(baki, 23);

alert( CountMap.get(baki) ); // 23

맵 요소에 대한 반복

//각 요소의 키를 모은 반복 가능한(iterable, 이터러블) 객체를 반환
map.keys()

//각 요소의 값을 모은 이터러블 객체를 반환
map.values()

//요소의 (키, 값)을 한 쌍으로 하는 이터러블 객체를 반환
map.entries()

let recipeMap = new Map((
  ('cucumber', 500),
  ('tomatoes', 350),
  ('onion',    50)
));

// 키(vegetable)를 대상으로 순회
for (let vegetable of recipeMap.keys()) {
  alert(vegetable); // cucumber, tomatoes, onion
}

// 값(amount)을 대상으로 순회
for (let amount of recipeMap.values()) {
  alert(amount); // 500, 350, 50
}

// (키, 값) 쌍을 대상으로 순회
for (let entry of recipeMap) { 			// recipeMap.entries()와 동일
  alert(entry); 				// cucumber,500 ...
}

지도준비내장 방식과 유사 모든또한 지원

// 각 (키, 값) 쌍을 대상으로 함수를 실행
recipeMap.forEach( (value, key, map) => {
  alert(`${key}: ${value}`); 				// cucumber: 500 ...
});

객체를 지도로 바꾸기

내장 방법 개체.항목(obj)이용하다, 이 방법 객체의 키-값 쌍은 요소((핵심 가치))는 배열을 반환합니다.

let obj = {
  name: "baki",
  age: 23
};

let map = new Map(Object.entries(obj));

alert( map.get('name') ); // baki

지도를 객체로 전환

물체. fromEntries이 방법은 모든 항목 (핵심 가치) 쌍의 배열을 객체로 변환

let map = new Map();
map.set('banana', 1);
map.set('orange', 2);
map.set('meat', 4);

let obj = Object.fromEntries(map.entries()); // 맵을 일반 객체로 변환 (*)

// 맵이 객체가 되었습니다!
// obj = { banana: 1, orange: 2, meat: 4 }

alert(obj.orange); // 2


문장

문장중복되지 않는 값의 특수 컬렉션입니다.

키가 없는 값은 세트에 저장됩니다.

//set 생성, 이터러블 객체를 전달받으면(ex.배열) 그 안의 값을 복사해 set에 넣음
new Set(iterable)

//값을 추가하고 set 자신을 반환
set.add(value)

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

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

//set을 비운다.
set.clear()

//set에 몇 개의 값이 있는지 카운트
set.size

(예를 사용)

방문자를 위한 방명록을 작성한다고 가정하면 방문자가 여러 번 와도 방문자 수를 반복해서 계산하면 안 됩니다. 즉, 방문자는 한 번만 기록하면 됩니다.

let set = new Set();

let john = { name: "John" };
let pete = { name: "Pete" };
let mary = { name: "Mary" };

// 어떤 고객(john, mary)은 여러 번 방문 가능
set.add(john);
set.add(pete);
set.add(mary);
set.add(john);
set.add(mary);

// set에는 중복된 값은 저장되지 않는다.
alert( set.size ); // 3

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

세트의 값을 반복

부터모든세트의 값을 반복할 수 있습니다.

let set = new Set(("oranges", "apples", "bananas"));

for (let value of set) alert(value);

// forEach를 사용해도 동일하게 동작합니다.
set.forEach((value, valueAgain, set) => {
  alert(value);
});

위의 코드에서 forEach 문은 세 개의 인수를 사용합니다. 첫 번째 값이 두 번째 값과 일치하는지 확인할수있다.

그 이유는 카드 호환성오전.

이 구현은 나중에 맵을 집합으로 대체하고 집합을 맵으로 대체할 때 유용할 수 있습니다.

집합에서 사용하는 반복 작업 방법

set 내의 모든 값을 포함하는 이터러블 객체를 반환
set.keys()

//set.keys와 동일한 작업 진행, map과의 호환성을 위해 만들어진 메서드
set.values()

//set 내의 각 값을 이용해 만든 (value, value) 배열을 포함하는 이터러블 객체를 반환, map과의 호환성을 위해 만들어짐
set.entries() –