/* 1. 빈 Map 객체 생성 */
const emptyMap = new Map(); // 아무 요소도 없는 빈 Map

/* 2. 초깃값을 가진 Map 생성 */
const initializedMap = new Map([ // 키와 값의 배열을 전달
    ["name", "Alice"],  // 문자열 키
    ["age", 25],        // 숫자 값
    [true, "Boolean"]   // 불리언 키
]);

/* 관련 속성과 메서드를 사용하여 데이터를 효율적으로 관리 */

/* 3. 요소 추가 */
emptyMap.set("fruit", "Apple");  // 문자열 키
emptyMap.set(42, "Answer");      // 숫자 키
emptyMap.set(false, "Boolean");  // 불리언 키
emptyMap.set({}, "Object Key");   // 객체 키

/* 4. 요소 조회 */
console.log(emptyMap.get("fruit")); // 출력: Apple
console.log(emptyMap.get(42));      // 출력: Answer
console.log(initializedMap.get("name")); // 출력: Alice

/* 5. 요소 삭제 */
emptyMap.delete("fruit");           
console.log(emptyMap.has("fruit")); // 출력: false

/* 6. Map 순회 (키-값 쌍 출력) */
for (const [key, value] of emptyMap) {
    console.log(key, value); // 삽입 순서대로 출력
}

/* 7. Map 크기 확인 */
console.log(emptyMap.size);       // Map에 남아있는 요소 개수
console.log(initializedMap.size); // 초기값 Map의 요소 개수
// 1. 빈 Map 객체 생성
new Map()

// 2. 초기값을 가진 Map 객체 생성
new Map(iterable)
// 1) 빈 Map 객체 생성
const emptyMap = new Map();
console.log(emptyMap); // 출력: Map(0) {}

// 2) 키와 값의 [ [key1, value1], [key2, value2], ... ] 형태로 묶은 2차원 배열을 전달해 초깃값을 가진 Map 생성
const initializedMap = new Map([
    ["name", "Alice"],  // 첫 번째 요소
    ["age", 25]         // 두 번째 요소
]);
console.log(initializedMap); // 출력: Map(2) {'name' => 'Alice', 'age' => 25}
// Map 객체 생성
const myMap = new Map();

// 요소 추가
myMap.set("name", "Alice");
myMap.set("age", 25);

// size 속성으로 요소 개수 확인
console.log(myMap.size); // 출력: 2

// 요소 하나 삭제
myMap.delete("age");
console.log(myMap.size); // 출력: 1

// 모든 요소 삭제
myMap.clear();
console.log(myMap.size); // 출력: 0
// Map 객체 생성
const myMap = new Map();

// .set(key, value)으로 요소 추가
myMap.set("name", "Alice");
myMap.set("age", 25);

// .get(key)으로 조회
console.log(myMap.get("name")); // 출력: Alice

// .has(key)로 존재 확인
console.log(myMap.has("age")); // 출력: true

// .delete(key)로 요소 삭제
myMap.delete("age");
console.log(myMap.has("age")); // 출력: false

// clear()로 전체 삭제
myMap.clear();
console.log(myMap.size); // 출력: 0

// .forEach()로 Map 순회
myMap.set("name", "Alice");
myMap.set("city", "Seoul");

myMap.forEach((value, key) => {
    console.log(`${key} => ${value}`);
});
// 출력:
// name => Alice
// city => Seoul
// Map 객체 생성
const myMap = new Map();

// 잘못된 사용: 객체처럼 속성 할당
myMap["key1"] = "value1";
myMap["key2"] = "value2";

// Map 요소 확인
console.log(myMap);      // Map(0) {}
console.log(myMap.size); // 0 → 실제 Map 요소 없음

// 객체 속성 확인
console.log(myMap["key1"]); // "value1"
console.log(myMap["key2"]); // "value2"
// Map 객체 생성
const userMap = new Map();

// 1) 새 키-값 쌍 추가
userMap.set("name", "Alice");
userMap.set("age", 25);

console.log(userMap);
// 출력 예시: Map(2) { 'name' => 'Alice', 'age' => 25 }

// 2) 기존 키 값 갱신
userMap.set("age", 26);
console.log(userMap.get("age")); 
// 출력: 26
// Map 객체 생성
const map = new Map([
    ["name", "Alice"],
    ["age", 26]
]);

// .forEach() 메서드 사용
// 콜백 첫 번째 매개변수: 값(value), 두 번째 매개변수: 키(key)
map.forEach((value, key) => {
    console.log(`${key} => ${value}`);
});
// 출력:
// name => Alice
// age => 26
const map = new Map([
    ["name", "Alice"],
    ["age", 26],
    ["city", "Seoul"]
]);

for (const [key, value] of map) {
    console.log(`${key}: ${value}`);
}
// 출력:
// name: Alice
// age: 26
// city: Seoul
// 참가자들이 도착한 순서대로 명단 만들기
const arrivalList = new Map();

// 참가자 도착 순서대로 Map에 기록 (key: 순서, value: 이름)
arrivalList.set(1, '김민지');
arrivalList.set(2, '박서준');
arrivalList.set(3, '이하윤');

// 순서대로 참가자 명단 출력
console.log("참가자 도착 순서:");
// for...of 반복문을 사용하여 순서대로 명단 확인
for (const [rank, name] of arrivalList) {
    console.log(`${rank}등: ${name}`);
}

// 출력:
// 참가자 도착 순서:
// 1등: 김민지
// 2등: 박서준
// 3등: 이하윤
// 게시물 데이터
const post1 = { id: 'p1', title: '자바스크립트' };
const post2 = { id: 'p2', title: 'HTML & CSS' };

// '좋아요'를 누른 사용자 목록 Map 생성 (key: 게시물 객체, value: 사용자 배열)
const likedByUsers = new Map();

// 첫 번째 게시물에 '김철수'가 '좋아요'를 눌렀다고 기록
likedByUsers.set(post1, ['김철수']);

// 두 번째 게시물에 '이영희'와 '박준'이 '좋아요'를 누름
likedByUsers.set(post2, ['이영희', '박준']);

// 특정 게시물에 좋아요 누른 사용자 확인
console.log(`${post1.title}을 좋아하는 사람: ${likedByUsers.get(post1).join(', ')}`);
// 출력: 자바스크립트를 좋아하는 사람: 김철수