๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
javascript/๐Ÿ“– study

[7์ฃผ์ฐจ ์Šคํ„ฐ๋””]37์žฅ-Set ๊ณผ Map

by HomieKim 2022. 3. 27.

Set๊ณผ Map

Set

  • Set๊ฐ์ฒด๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์œ ์ผํ•œ ๊ฐ’๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค.
  • Set๊ฐ์ฒด๋Š” ๋ฐฐ์—ด๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
๊ตฌ๋ถ„ ๋ฐฐ์—ด Set๊ฐ์ฒด
๋™์ผํ•œ ๊ฐ’์„ ์ค‘๋ณตํ•˜์—ฌ ํฌํ•จ ํ•  ์ˆ˜ ์žˆ๋‹ค O X
์š”์†Œ ์ˆœ์„œ์— ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค. O X
์ธ๋ฑ์Šค๋กœ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. O X
  • Set์€ ์ˆ˜ํ•™์  ์ง‘ํ•ฉ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค, ๊ต์ง‘ํ•ฉ, ํ•ฉ์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ, ์—ฌ์ง‘ํ•ฉ ๋“ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

Set ๊ฐ์ฒด์˜ ์ƒ์„ฑ

  • Set ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋นˆ Set ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ ๋ฉ๋‹ˆ๋‹ค.
  • Set ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์•„ Set ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. (์ด๋•Œ, ์ค‘๋ณต๋œ ๊ฐ’์€ Set ๊ฐ์ฒด์— ์š”์†Œ๋กœ ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.)
  • Set ๊ฐ์ฒด์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•ด์„œ ๋ฐฐ์—ด์˜ ์ค‘๋ณต๋œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
const set= new Set(); // ๋นˆ set ๊ฐ์ฒด
// ์ค‘๋ณต ์š”์†Œ๋Š” ์ €์žฅ x
const set2 = new Set([1,2,2,3,4]);
console.log(set2); // Set(4) {1, 2, 3, 4}

// Set์„ ํ™œ์šฉํ•œ ๋ฐฐ์—ด์˜ ์ค‘๋ณต ์š”์†Œ ์ œ๊ฑฐ
const uniq = (arr) => [... new Set(arr)];
console.log(uniq([2,1,2,3,4,3,4])); // [2,1,3,4]

์š”์†Œ ๊ฐœ์ˆ˜ ํ™•์ธ

  • Set ๊ฐ์ฒด์˜ ์š”์†Œ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•  ๋•Œ๋Š” Set.prototype.size ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • size ํ”„๋กœํผํ‹ฐ๋Š” getterํ•จ์ˆ˜๋งŒ ์กด์žฌํ•˜๋Š” ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ ๋”ฐ๋ผ์„œ sizeํ”„๋กœํผํ‹ฐ์— ์ˆซ์ž๋ฅผ ํ• ๋‹นํ•˜์—ฌ Set๊ฐ์ฒด์˜ ์š”์†Œ ๊ฐœ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
const {size} = new Set([1,2,3,3]);
console.log(size); // 3

์š”์†Œ ์ถ”๊ฐ€

  • Set ๊ฐ์ฒด์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” Set.prototype.add ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • add ๋ฉ”์„œ๋“œ๋Š” ์ƒˆ๋กœ์šด ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋œ ์ƒˆ๋กœ์šด Set ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ์†์ ์œผ๋กœ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅ(method chaining)
const set = new Set();
set.add(1);
console.log(set); // Set(1) {1}
set.add(2).add(3);
console.log(set); // Set(3) {1, 2, 3}
  • Set ๊ฐ์ฒด๋Š” ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด๊ณผ ๊ฐ™์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ’์„ ์š”์†Œ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
const set = new Set();

set
  .add(1)
  .add('a')
  .add(true)
  .add(undefined)
  .add(null)
  .add({})
  .add([]);

console.log(set); // Set(7) {1, "a", true, undefined, null, {}, []}

์š”์†Œ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

  • Set ๊ฐ์ฒด์— ํŠน์ • ์š”์†Œ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ ํ•˜๋ ค๋ฉด Set.prototype.has ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ
  • ์กด์žฌ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
const set = new Set([1,2,3]);

console.log(set.has(2)); // true
console.log(set.has(4)); // false

์š”์†Œ ์‚ญ์ œ

  • Set ๊ฐ์ฒด์˜ ํŠน์ • ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด Set.prototype.delete ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์‚ญ์ œ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (method chaining ๋ถˆ๊ฐ€)
  • delete ๋ฉ”์„œ๋“œ์—๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์‚ญ์ œํ•˜๋ ค๋Š” ์š”์†Œ๊ฐ’์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.
    (Set ๊ฐ์ฒด๋Š” ์ˆœ์„œ์— ์˜๋ฏธ๊ฐ€ ์—†๊ธฐ๋•Œ๋ฌธ์—, ๋ฐฐ์—ด๊ณผ ๊ฐ™์ด ์ธ๋ฑ์Šค ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.)
  • ์กด์žฌ ํ•˜์ง€ ์•Š๋Š” Set ๊ฐ์ฒด์˜ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ์—๋Ÿฌ ์—†์ด ๋ฌด์‹œ ๋จ
const set = new Set([1,2,3]);
// ์š”์†Œ 2 ์‚ญ์ œ
set.delete(2);
console.log(set); // Set(2) {1,3}
// ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์š”์†Œ ์‚ญ์ œ ์‹œ ๋ฌด์‹œ ๋จ
set.delete(4);
console.log(set); // Set(2) {1,3}

์š”์†Œ ์ผ๊ด„ ์‚ญ์ œ

  • Set ๊ฐ์ฒด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ผ๊ด„ ์‚ญ์ œํ•˜๋ ค๋ฉด Set.prototype.clear ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (clear ๋ฉ”์„œ๋“œ๋Š” ํ•ญ์ƒ undefined ๋ฐ˜ํ™˜)
const set = new Set([1,2,3]);

set.clear();
console.log(set); // Set(0) {}

์š”์†Œ ์ˆœํšŒ

  • Set ๊ฐ์ฒด์˜ ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ ค๋ฉด Set.prototype.forEach ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • Array.prototype.forEach ๋ฉ”์„œ๋“œ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ๋ฐ›์Œ, ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— 3๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌ

    1. ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜ : ํ˜„์žฌ ์ˆœํšŒ ์ค‘์ธ ์š”์†Œ๊ฐ’
    2. ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜ : ํ˜„์žฌ ์ˆœํšŒ ์ค‘์ธ ์š”์†Œ๊ฐ’
    3. ์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜ : ํ˜„์žฌ ์ˆœํšŒ ์ค‘์ธ Set ๊ฐ์ฒด ์ž์ฒด

      ์ฒซ ๋ฒˆ์žฌ ์ธ์ˆ˜์™€ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ–๋Š”๋ฐ, ์ด๋Š” Array.prototype.forEach์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งž์ถ”๊ธฐ ์œ„ํ•จ

const set = new Set([1, 2, 3]);

set.forEach((v, v2, set) => console.log(v, v2, set));
/*
1 1 Set(3) {1, 2, 3}
2 2 Set(3) {1, 2, 3}
3 3 Set(3) {1, 2, 3}
*/
  • Set ๊ฐ์ฒด๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ” ์ด๋ฏ€๋กœ for ... of ๋ฌธ์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•๊ณผ ๋ฐฐ์—ด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง์˜ ๋Œ€์ƒ์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

์ง‘ํ•ฉ ์—ฐ์‚ฐ

  • Set๊ฐ์ฒด๋Š” ์ˆ˜ํ•™์  ์ง‘ํ•ฉ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์ด๋‹ค.

๊ต์ง‘ํ•ฉ ๊ตฌํ˜„

// ๋ฐฉ๋ฒ•1
Set.prototype.intersection = function (set){
    const result = new Set();
    for(const value of set) {
        if(this.has(value)) result.add(value);
    }
    return result;
};

// ๋ฐฉ๋ฒ•2
Set.prototype.intersection = function (set) {
    return new Set([...this].filter(v => set.has(v)));
};

ํ•ฉ์ง‘ํ•ฉ ๊ตฌํ˜„

// ๋ฐฉ๋ฒ•1
Set.prototype.union = function (set) {
    // this(Set ๊ฐ์ฒด)๋ฅผ ๋ณต์‚ฌ
    const result = new Set(this);

    for(const value of set) {
        result.add(value);
    }
    return result;
};

// ๋ฐฉ๋ฒ•2
Set.prototype.union = function (set) {
    return new Set([...this, ...set]);
};

์ฐจ์ง‘ํ•ฉ ๊ตฌํ˜„

// ๋ฐฉ๋ฒ•1
Set.prototype.difference = function (set) {
    const result = new Set(this);
    for(const value of set) {
        result.delete(value);
    }
    return result;
};

// ๋ฐฉ๋ฒ•2
Set.prototype.difference = function (set) {
    return new Set([...this].filter(v => !set.has(v)));
};

๋ถ€๋ถ„ ์ง‘ํ•ฉ

// ๋ฐฉ๋ฒ•1
Set.prototype.isSuperset = function (subset) {
    for(const value of subset) {
        // ๋ชจ๋“  ์š”์†Œ๊ฐ€ ํฌํ•จ ๋˜๋Š”์ง€ ํ™•์ธ
        if(!this.has(value))return false;
    }
    return true;
};

// ๋ฐฉ๋ฒ•2
Set.prototype.isSuperSet = function (subset) {
    const superSet = [...this];
    return [...subset].every(v => superSet.includes(v));
}

Map

  • Map ๊ฐ์ฒด๋Š” ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ปฌ๋ ‰์…˜ ์ด๋‹ค.
  • ๊ฐ์ฒด์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
๊ตฌ๋ถ„ ๊ฐ์ฒด Map ๊ฐ์ฒด
ํ‚ค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’ string, Symbol ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ๊ฐ’
์ดํ„ฐ๋Ÿฌ๋ธ” X O
์š”์†Œ ๊ฐœ์ˆ˜ ํ™•์ธ Object.keys(obj).length map.size

Map ๊ฐ์ฒด์˜ ์ƒ์„ฑ

  • Map ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ
  • Map ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์•„ Map ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ์ด๋•Œ ์ „๋‹ฌ๋˜๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์€ ํ‚ค์™€ ๊ฐ’์˜ ์‹ธ์‘๋กœ ์ด๋ฃจ์–ด์ง„ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • Map ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ์ดํ„ฐ๋Ÿฌ๋ธ”์— ์ค‘๋ณต๋œ ํ‚ค๋ฅผ ๊ฐ–๋Š” ์š”์†Œ๊ฐ€ ์กด์žํ•˜๋ฉด ๋ฎ์–ด ์”Œ์›Œ์ง
  • ๋”ฐ๋ผ์„œ Map ๊ฐ์ฒด์—๋Š” ์ค‘๋ณต๋œ ํ‚ค๋ฅผ ๊ฐ–๋Š” ์š”์†Œ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์—†๋‹ค.
const map1 = new Map([['key1', 'value1'], ['key2', 'value2']]);
console.log(map1); // Map(2) {"key1" => "value1", "key2" => "value2"}

const map2 = new Map([1, 2]); // TypeError: Iterator value 1 is not an entry object

// ์ค‘๋ณต๋œ ํ‚ค ๋ถˆ๊ฐ€๋Šฅ
const map = new Map([['key1', 'value1'], ['key1', 'value2']]);
console.log(map); // Map(1) {"key1" => "value2"}

์š”์†Œ ๊ฐœ์ˆ˜ ํ™•์ธ

  • Map.prototype.size๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ ๊ฐœ์ˆ˜ ํ™•์ธ
  • size ๋ฉ”์„œ๋“œ๋Š” getterํ•จ์ˆ˜๋งŒ ์กด์žฌํ•˜๋Š” ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ (์ฆ‰ ์‚ฌ์ด์ฆˆ ํ• ๋‹นํ•˜์—ฌ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€)
const { size } = new Map([['key1', 'value1'], ['key2', 'value2']]);
console.log(size); // 2

์š”์†Œ ์ถ”๊ฐ€

  • Map.prtototype.set ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€
  • set ๋ฉ”์„œ๋“œ๋Š” ์ƒˆ๋กœ์šด ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋œ Map ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜(Method Chaining ๊ฐ€๋Šฅ)
const map = new Map();

map
  .set('key1', 'value1')
  .set('key2', 'value2');

console.log(map); // Map(2) {"key1" => "value1", "key2" => "value2"}
  • ๊ฐ์ฒด๋Š” ๋ฌธ์ž์—ด ๋˜๋Š” ์‹ฌ๋ฒŒ ๊ฐ’๋งŒ ํ‚ค๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜์ง€๋งŒ Map ๊ฐ์ฒด๋Š” ํ‚คํƒ€์ž…์— ์ œํ•œ์ด ์—†๋‹ค. ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ๊ฐ’์„ ํ‚ค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
const map = new Map();

const lee = { name: 'Lee' };
const kim = { name: 'Kim' };

// ๊ฐ์ฒด๋„ ํ‚ค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
map
  .set(lee, 'developer')
  .set(kim, 'designer');

console.log(map);
// Map(2) { {name: "Lee"} => "developer", {name: "Kim"} => "designer" }

์š”์†Œ ์ทจ๋“

  • ํŠน์ • ์š”์†Œ๋ฅผ ์ทจ๋“ํ•˜๋ ค๋ฉด Map.prototype.get ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • get ๋ฉ”์„œ๋“œ์˜ ์ธ์ˆ˜๋กœ ํ‚ค๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์ „๋‹ฌํ•œ ํ‚ค๋ฅผ ๊ฐ–๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜
  • ํ‚ค์— ๋งž๋Š” ์š”์†Œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด undefined ๋ฐ˜ํ™˜
const map = new Map();

const lee = { name: 'Lee' };
const kim = { name: 'Kim' };

map
  .set(lee, 'developer')
  .set(kim, 'designer');

console.log(map.get(lee)); // developer
console.log(map.get('key')) // undefined

์š”์†Œ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

const lee = { name: "Lee" };
const kim = { name: "Kim" };

const map = new Map([
  [lee, "developer"],
  [kim, "designer"],
]);

map.has(lee); // true
map.has("key"); // false

์š”์†Œ ์‚ญ์ œ

  • Map.prototype.delete ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ ์‚ญ์ œ
  • delete ๋ฉ”์„œ๋“œ๋Š” ์‚ญ์ œ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜(Method Chaining ๋ถˆ๊ฐ€)
  • ์กด์žฌ ํ•˜์ง€ ์•Š๋Š” ํ‚ค๋กœ ์‚ญ์ œ์‹œ ๋ฌด์‹œ ๋จ

์š”์†Œ ์ผ๊ด„ ์‚ญ์ œ

  • Map.prototype.clear ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
  • clear ๋ฉ”์„œ๋“œ๋Š” ์–ธ์ œ๋‚˜ undefined ๋ฐ˜ํ™˜

์š”์†Œ ์ˆœํšŒ

  • Map.prototype.forEach ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ

  • forEach ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” 3๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌ ๋ฐ›์Œ

    1. ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜ : ํ˜„์žฌ ์ˆœํšŒ ์ค‘์ธ ์š”์†Œ ๊ฐ’
    2. ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜ : ํ˜„์žฌ ์ˆœํšŒ ์ค‘์ธ ์š”์†Œ ํ‚ค
    3. ์„ธ ๋ฒˆ์žฌ ์ธ์ˆ˜ : ํ˜„์žฌ ์ˆœํšŒ ์ค‘์ธ Map ๊ฐ์ฒด ์ž์ฒด
  • Map ๊ฐ์ฒด๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ” ์ด๊ธฐ ๋•Œ๋ฌธ์— for ... of ์ˆœํšŒ ๊ฐ€๋Šฅ, ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•๊ณผ ๋ฐฐ์—ด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น ๊ฐ€๋Šฅ

const lee = { name: 'Lee' };
const kim = { name: 'Kim' };

const map = new Map([[lee, 'developer'], [kim, 'designer']]);

map.forEach((v, k, map) => console.log(v, k, map));
/*
developer {name: "Lee"} Map(2) {
  {name: "Lee"} => "developer",
  {name: "Kim"} => "designer"
}
designer {name: "Kim"} Map(2) {
  {name: "Lee"} => "developer",
  {name: "Kim"} => "designer"
}
*/
  • Map ๊ฐ์ฒด๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ฉด์„œ ๋™์‹œ์— ์ดํ„ฐ๋ ˆ์ดํ„ฐ์ธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณต
Map ๋ฉ”์„œ๋“œ ์„ค๋ช…
Map.prototype.keys Map ๊ฐ์ฒด์—์„œ ์š”์†Œ ํ‚ค๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ–๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ฉด์„œ ๋™์‹œ์— ์ดํ„ฐ๋ ˆ์ดํ„ฐ์ธ ๊ฐ์ฒด ๋ฐ˜ํ™˜
Map.prototype.values Map ๊ฐ์ฒด์—์„œ ์š”์†Œ ๊ฐ’์„ ๊ฐ’์œผ๋กœ ๊ฐ–๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ฉด์„œ ๋™์‹œ์— ์ดํ„ฐ๋ ˆ์ดํ„ฐ์ธ ๊ฐ์ฒด ๋ฐ˜ํ™˜
Map.prototype.entries Map ๊ฐ์ฒด์—์„œ ์š”์†Œ ํ‚ค์™€ ์š”์†Œ ๊ฐ’์„ ๊ฐ’์œผ๋กœ ๊ฐ–๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ฉด์„œ ๋™์‹œ์— ์ดํ„ฐ๋ ˆ์ดํ„ฐ์ธ ๊ฐ์ฒด ๋ฐ˜ํ™˜
  • Map ๊ฐ์ฒด๋Š” ์š”์†Œ์˜ ์ˆœ์„œ์— ์˜๋ฏธ๋ฅผ ๊ฐ–์ง€ ์•Š์ง€๋งŒ ์ˆœํšŒํ•˜๋Š” ์ˆœ์„œ๋Š” ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋œ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฆ„ (๋‹ค๋ฅธ ์ดํ„ฐ๋Ÿฌ๋ธ” ์ˆœํšŒ์™€ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•จ)

๋Œ“๊ธ€