๋ฐ˜์‘ํ˜•

Map


Map์€ ํ•ญ์ƒ `map` ์ „์šฉ ๋ฉ”์„œ๋“œ(`set`, `get` ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. `map[key] = 2` ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉด `map`์„ ์ผ๋ฐ˜ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•˜๋ฏ€๋กœ ๋งŽ์€ ์ œ์•ฝ์ด ์ƒ๊ธด๋‹ค.

 

TL;DR

โถ key-value๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์ปฌ๋ ‰์…˜(์ง‘ํ•ฉ) โญ๏ธ

 

โท ์‚ฝ์ž… ์ˆœ์„œ ๊ธฐ์–ต

 

โธ ์ค‘๋ณต key ๋ถˆ๊ฐ€ — ์ด๋ฏธ ์กด์žฌํ•˜๋Š” key์— ๋Œ€ํ•œ value๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๋‹น key์˜ value๋ฅผ ๋ฎ์–ด์”€

let map = new Map([['one', 1]]);
map.get('one'); // 1
map.set('one', 111);
map.get('one'); // 111

 

โน Map ๋‚ด์žฅ ๋ฉ”์„œ๋“œ forEach ์ง€์›(๋ฐฐ์—ด forEach ๋ฉ”์„œ๋“œ์™€ ์œ ์‚ฌ) / for of ์ˆœํšŒ ๊ฐ€๋Šฅ

map.forEach((value, key, map) => { /* ... */ });

 

โบ key์™€ value์— ์ฐธ์กฐํ˜• / ์›์‹œํ˜• ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ — ๊ฐ์ฒด๋Š” string / symbol ํƒ€์ž…๋งŒ key๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

const john = { name: 'John' };
const visitsCountMap = new Map();
visitsCountMap.set(john, 888); // ๊ฐ์ฒด๋ฅผ key๋กœ ์‚ฌ์šฉํ•จ
visitsCountMap.get(john); // 888

 

๋งต์ด ํ‚ค๋ฅผ ๋น„๊ตํ•  ๋• NaN NaN, -0 +0 0์ด ๋™์ผํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•จ(sameValueZero ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ)

let map = new Map();
map.set(NaN, 'Not a Number');
map.get(NaN); // 'Not a Number'

map.set(-0, 'Zero');
map.get(0); // 'Zero'

 

โป Map ์ƒ์„ฑ์ž๋Š” ๊ฐ ์š”์†Œ๊ฐ€ [key, value] ์Œ์œผ๋กœ ๋œ ๋ฐฐ์—ด์„ ์ธ์ž๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

let map = new Map([
  ['one', 1],
  ['two', 2],
]);
console.log(map); // Map(2) {'one' => 1, 'two' => 2}
console.log(Object.fromEntries(map)); // { one: 1, two: 2 }

 

โผ map → ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ€ ๋• Object.fromEntries() ์‚ฌ์šฉ

const map = new Map([
  ['name', 'Colorfilter'],
  ['age', 30],
]);

const obj = Object.fromEntries(map.entries()); // .entries() ์ƒ๋žต ๊ฐ€๋Šฅ
console.log(obj); // { name: 'Colorfilter', age: 30 }

 

โฝ ๊ฐ์ฒด → map์œผ๋กœ ๋ฐ”๊ฟ€ ๋• Object.entries() ์‚ฌ์šฉ

const obj = { name: 'ColorFilter', age: 30 };
let map = new Map(Object.entries(obj));

 

โพ map.set ์„ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๋งต ์ž์‹ ์ด ๋ฐ˜ํ™˜๋˜๋Š” ์ ์„ ์ด์šฉํ•ด ์ฒด์ด๋‹ ๊ฐ€๋Šฅ

map.set('1', 'str1').set(1, 'num1').set(true, 'bool1');

 

Map๊ณผ Object ์ž๋ฃŒ๊ตฌ์กฐ ์ฐจ์ด์  โญ๏ธ

๊ฐ์ฒด(Object) ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ํ‚ค๊ฐ€ ์žˆ๋Š” ์ปฌ๋ ‰์…˜์„ ์ €์žฅํ•œ๋‹ค.

 

  Map Object
Key ์ž๋ฃŒํ˜• ์›์‹œํ˜• / ์ฐธ์กฐํ˜• ๋ชจ๋‘ ๊ฐ€๋Šฅ String, Symbol
์ •๋ ฌ ์‚ฝ์ž… ์ˆœ์„œ ๊ธฐ์–ต (ES6) String, Symbol ํƒ€์ž…์˜ ํ‚ค ์ƒ์„ฑ ์ˆœ์„œ๋งŒ ๊ธฐ์–ต
ํฌ๊ธฐ size ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ์ˆ˜๋™์œผ๋กœ ํฌ๊ธฐ ์ถ”์ 
์„ฑ๋Šฅ key-value ์ถ”๊ฐ€/์ œ๊ฑฐ ๋นˆ๋ฒˆํ•  ๋•Œ ์ข‹์€ ์„ฑ๋Šฅ key-value ์ถ”๊ฐ€/์ œ๊ฑฐ๊ฐ€ ๋นˆ๋ฒˆํ•  ๋•Œ ์ตœ์ ํ™” ์—†์Œ

 

Map ๋ฉ”์„œ๋“œ

โถ new Map() — (์ƒ์„ฑ์ž) ์ƒˆ๋กœ์šด map ์ƒ์„ฑ

๊ฐ ์š”์†Œ๊ฐ€ [key, value] ์Œ์œผ๋กœ ๋œ ๋ฐฐ์—ด์„ ์ƒ์„ฑ์ž ์ธ์ž๋กœ ๋„˜๊ฒจ์„œ ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

const map1 = new Map();
map1.set('one', 1);
map1.set('two', 2);

const map2 = new Map([
  ['one', 1],
  ['two', 2],
]);

 

โท map.set(key, value) — key๋ฅผ ์ด์šฉํ•ด value ์ €์žฅํ•œ ํ›„ map ์ž์‹  ๋ฐ˜ํ™˜

์ผ๋ฐ˜ ๊ฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋ฌธ์ž์—ด ํƒ€์ž…์œผ๋กœ ๊ฐ•์ œ ๋ณ€ํ™˜ํ•˜์ง€๋งŒ Map ๊ฐ์ฒด์˜ ํ‚ค๋Š” ์ž๋ฃŒํ˜•์— ์ œ์•ฝ์ด ์—†๋‹ค.

const map = new Map();
map.set('1', 'str1'); // ๋ฌธ์žํ˜• ํ‚ค | Map(1) {'1' => 'str1'}
map.set(1, 'num1'); // ์ˆซ์žํ˜• ํ‚ค | Map(2) {'1' => 'str1', 1 => 'num1'}
map.set(true, 'bool1'); // ๋ถˆ๋ฆฐํ˜• ํ‚ค | Map(3) {'1' => 'str1', 1 => 'num1', true => 'bool1'}

 

`map.set()` ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ‚ค-๊ฐ’ ์Œ๋งŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ‚ค-๊ฐ’ ์Œ์„ ์—ฐ์†์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

const map = new Map();
map.set('a', 10).set('b', 20); // Map(2) {'a' => 10, 'b' => 20}

 

โธ map.get(key) — key์— ํ•ด๋‹นํ•˜๋Š” value ๋ฐ˜ํ™˜. key๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด undefined ๋ฐ˜ํ™˜

const map = new Map();
map.set('one', 1);
map.get('one'); // 1
map.get('two'); // undefined

 

โน map.has(key) — key๊ฐ€ ์กด์žฌํ•˜๋ฉด true, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด false ๋ฐ˜ํ™˜

const map = new Map();
map.set('one', 1);
map.has('one'); // true
map.has('two'); // false

 

โบ map.delete(key) — key ์— ํ•ด๋‹นํ•˜๋Š” value ์‚ญ์ œ

์‚ญ์ œ ์ž‘์—…์— ์„ฑ๊ณตํ•˜๋ฉด true ๋ฐ˜ํ™˜, Map ๊ฐ์ฒด์— key๊ฐ€ ์—†์–ด์„œ ์‚ญ์ œ ์ž‘์—…์„ ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด false ๋ฐ˜ํ™˜

const map = new Map();
map.set('one', 1);
map.get('one'); // 1
map.delete('one'); // true
map.get('one'); // undefined
map.delete('one'); // false

 

โป map.size — ์š”์†Œ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜

const map = new Map([
  ['one', 1],
  ['two', 2],
]);

map.size; // 2

 

โผ map.clear() — ๋งต์˜ ๋ชจ๋“  ์š”์†Œ ์ œ๊ฑฐ

const map = new Map([
  ['one', 1],
  ['two', 2],
]);

map.size; // 2
map.clear();
map.size; // 0

 

Map ์ˆœํšŒ

๋งต์€ ์‚ฝ์ž… ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•˜๋ฉฐ, ์‚ฝ์ž…๋œ ์ˆœ์„œ๋Œ€๋กœ ์ˆœํšŒํ•œ๋‹ค.

 

โถ map.keys() — ๊ฐ ์š”์†Œ์˜ key๋ฅผ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด ๋ฐ˜ํ™˜

const map = new Map([
  ['one', 1],
  ['two', 2],
  ['three', 3],
]);

map.keys(); // MapIterator {'one', 'two', 'three'}
[...map.keys()]; // ['one', 'two', 'three']

for (const key of map.keys()) {
  console.log(key); // one two three
}

 

โท map.values() — ๊ฐ ์š”์†Œ์˜ value๋ฅผ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด ๋ฐ˜ํ™˜

const map = new Map([
  ['one', 1],
  ['two', 2],
  ['three', 3],
]);

map.values(); // MapIterator {1, 2, 3}
[...map.values()]; // [1, 2, 3]

for (const value of map.values()) {
  console.log(value); // 1 2 3
}

 

โธ map.entries() — ๊ฐ ์š”์†Œ์˜ [key, value]๋ฅผ ํ•œ ์Œ์œผ๋กœ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด ๋ฐ˜ํ™˜

const map = new Map([
  ['one', 1],
  ['two', 2],
  ['three', 3],
]);

map.entires(); // MapIterator {'one' => 1, 'two' => 2, 'three' => 3}
[...map.entries()]; // [Array(2), Array(2), Array(2)]

// for (const entry of map.entries()) ๋™์ผ
for (const entry of map) {
  console.log(entry); // ['one', 1] ['two', 2] ['three', 3]
}

 

โน map.forEach — map ๋‚ด์žฅ ๋ฉ”์„œ๋“œ โšก๏ธ

const map = new Map([
  ['one', 1],
  ['two', 2],
  ['three', 3],
]);

map.forEach((value, key, map) => {
  console.log(`${key}: ${value}`); // one: 1 two: 2 three: 3
});

 

โบ for of — ๋งต ์ˆœํšŒ

const obj = { one: 1, two: 2, three: 3 };
const map = new Map(Object.entries(obj));

// entry -> [key, value] ์ด๋ ‡๊ฒŒ ๊ตฌ์กฐ๋ถ„ํ•ด ํ•  ์ˆ˜๋„ ์žˆ๋‹ค
for (const entry of map) {
  console.log(entry); // ['one', 1], ['two', 2], ['three', 3]
}

 

Set


TL;DR

โถ ์ค‘๋ณต๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” value๋กœ ์ด๋ฃจ์–ด์ง„ ์ปฌ๋ ‰์…˜(์ง‘ํ•ฉ) โญ๏ธ

 

โท ์ค‘๋ณต value ๋ถˆ๊ฐ€ —Set์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” value๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ ์•„๋ฌด์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Œ

const set = new Set([1, 2, 3, 4, 5]);
set.keys(); // SetIterator {1, 2, 3, 4, 5}
set.add(2);
set.keys(); // SetIterator {1, 2, 3, 4, 5}

 

โธ for of ๋ฐ forEach ๋ฉ”์„œ๋“œ๋กœ set ๊ฐ’์„ ๋Œ€์ƒ์œผ๋กœํ•œ ๋ฐ˜๋ณต ์ž‘์—… ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ

// Map์˜ forEach ์ฝœ๋ฐฑ์ด 3๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์œผ๋ฏ€๋กœ
// Map๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๊ฐ’์ด ๊ฐ™์€ 1๋ฒˆ์งธ, 2๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ค‘๋ณต๋จ(value, valueAgain ๋™์ผ)
set.forEach((value, valueAgain, set) => { /* ... */ });

// for of ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ ์ˆœํšŒ ๊ฐ€๋Šฅ
for (const value of set) { /* ... */ }

 

โนArray.from() ํ˜น์€ [...set] ์ „๊ฐœ๋ฌธ๋ฒ•์œผ๋กœ set → (์ƒˆ๋กœ์šด)๋ฐฐ์—ด ๋ณ€ํ™˜

const set = new Set([1, 2, 3, 4, 5]);
const arr1 = Array.from(set); //  [1, 2, 3, 4, 5]
const arr2 = [...set]; // [1, 2, 3, 4, 5]

arr1 === arr2; // false
arr1 === set; // false

 

โบ Set ์ƒ์„ฑ์ž๋Š” ๋ฐฐ์—ด์„ ์ธ์ž๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , ํ•ด๋‹น ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•œ ํ›„ Set ๊ฐ์ฒด์˜ ์š”์†Œ๋กœ ์ €์žฅ(์ค‘๋ณต๊ฐ’ ์ œ๊ฑฐ๋จ)

let set = new Set([1, 1, 3, 4, 4, 8, 8, 9]);
console.log(set); // Set(5) {1, 3, 4, 8, 9} ์ค‘๋ณต๊ฐ’ ์ œ๊ฑฐ๋จ
console.log([...set]); // [1, 3, 4, 8, 9]

 

Set๊ณผ Array ์ž๋ฃŒ๊ตฌ์กฐ ์ฐจ์ด์  โญ๏ธ

๋ฐฐ์—ด(Array) ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์ปฌ๋ ‰์…˜์„ ์ €์žฅํ•œ๋‹ค.

 

  Set Array
ํŠน์ • ๊ฐ’ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ has ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ (๋น ๋ฆ„) indexOf ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ (๋Š๋ฆผ), NaN์€ ์ฐพ์„ ์ˆ˜ ์—†์Œ
๊ฐ’ ์‚ญ์ œ delete ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ splice, slice ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • ๋ถ€๋ถ„์„ ์ž˜๋ผ๋‚ด์•ผ ํ•จ
์ค‘๋ณต๊ฐ’ ํ™•์ธ ๊ฐ’์˜ ์œ ์ผ์„ฑ์„ ๋ณด์žฅํ•˜๋ฏ€๋กœ ์ค‘๋ณต ํ™•์ธ ๋ถˆํ•„์š” filter, indexOf ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์กฐํ•ฉํ•ด ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์š”์†Œ ์ „์ฒด๋ฅผ ์กฐํšŒํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ ์•ˆ์ข‹์Œ

 

Set ๋ฉ”์„œ๋“œ


โถ new Set(iterable) — (์ƒ์„ฑ์ž) ์ƒˆ๋กœ์šด set ์ƒ์„ฑ

Set ์ƒ์„ฑ์ž๊ฐ€ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด(๋ฐฐ์—ด ๋“ฑ)๋ฅผ ๋ฐ›์œผ๋ฉด ์ค‘๋ณต๊ฐ’์„ ์ œ๊ฑฐํ•œ ํ›„ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ set ๊ฐ์ฒด์— ์ถ”๊ฐ€ํ•œ๋‹ค.

const set1 = new Set();
set1.add(1);
set1.add(2);
// ...

const set2 = new Set([1, 2, 1, 1, 8, 8, 9]); // set ์ƒ์„ฑ์ž๊ฐ€ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ฅผ ๋ฐ›์Œ
console.log(set2); // Set(4) {1, 2, 8, 9} } | ์ค‘๋ณต๊ฐ’์ด ๋ชจ๋‘ ์ œ๊ฑฐ๋๋‹ค

 

์ดํ„ฐ๋Ÿฌ๋ธ”์ธ ๋ฌธ์ž์—ด์„ ์ „๋‹ฌํ•˜๋ฉด ๊ฐ ๋ฌธ์ž๊ฐ€ ๊ฐœ๋ณ„ ์š”์†Œ๋กœ ์ถ”๊ฐ€๋œ๋‹ค.

new Set('aabbccee'); // Set(4) {'a', 'b', 'c', 'e'}

 

โท set.add(value) — value๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ set ์ž์‹  ๋ฐ˜ํ™˜

Set ๊ฐ์ฒด์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด set.add() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด๋„ ์•„๋ฌด ์ž‘์—…๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

const set = new Set();
set.add(1); // Set(1) {1}
set.add(2); // Set(2) {1, 2}
set.add(1); // value๊ฐ€ ์ค‘๋ณต๋˜๋ฏ€๋กœ ์•„๋ฌด ์ž‘์—…๋„ ํ•˜์ง€ ์•Š์Œ

 

`set.add()` ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์š”์†Œ๋งŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹์œผ๋กœ ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

const set = new Set();
set.add(1).add(2); // Set(2) {1, 2}

 

โธset.delete(value) — value ์ œ๊ฑฐ

์‚ญ์ œ ์ž‘์—…์— ์„ฑ๊ณตํ•˜๋ฉด true ๋ฐ˜ํ™˜, set์— value๊ฐ€ ์—†์–ด์„œ ์‚ญ์ œ ์ž‘์—…์„ ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด false ๋ฐ˜ํ™˜

const set = new Set([1, 2, 3, 4, 5]);
set.delete(1); // true
set.delete(8); // false

 

โน set.has(value) — set์— value๊ฐ€ ์กด์žฌํ•˜๋ฉด true, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด false ๋ฐ˜ํ™˜

const set = new Set([1, 2, 3, 4, 5]);
set.has(2); // true
set.has(8); // false

 

โบ set.size — set์˜ value ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜

const set = new Set([1, 2, 3, 4, 5]);
set.size; // 5

 

โป set.clear() — set ์•ˆ์˜ ๋ชจ๋“  ์š”์†Œ ์ œ๊ฑฐ

const set = new Set([1, 2, 3, 4, 5]);
set.size; // 5
set.clear();
set.size; // 0

 

Set ์ˆœํšŒ

Set ์—ญ์‹œ Map์ฒ˜๋Ÿผ ์‚ฝ์ž… ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฝ์ž…ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ˆœํšŒํ•œ๋‹ค.

 

โถ set.keys() set.values() — ๊ฐ ์š”์†Œ์˜ key/value๋ฅผ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด ๋ฐ˜ํ™˜

set.values()๋Š” map๊ณผ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ฉ”์„œ๋“œ. set.keys()์™€ ๋™์ผํ•˜๋‹ค.

const fruitSet = new Set(['oranges', 'apples']);
fruitSet.keys(); // SetIterator {'oranges', 'apples'}
const fruitArr = [...fruitSet]; // ['oranges', 'apples']
fruitSet === FruitArr; // false

 

โท set.entries() — ๊ฐ ์š”์†Œ์˜ [value, value]๋ฅผ ํ•œ ์Œ์œผ๋กœ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด ๋ฐ˜ํ™˜

map๊ณผ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ฉ”์„œ๋“œ. 

const fruitSet = new Set(['oranges', 'apples']);
fruitSet.entries(); // SetIterator {'oranges' => 'oranges', 'apples' => 'apples'}
[...fruitSet.entries()]; // [['oranges', 'oranges'], ['apples', 'apples']]

 

โธ for of — set ๊ฐ’์„ ๋Œ€์ƒ์œผ๋กœ ๋ฐ˜๋ณต ์ž‘์—… ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ โšก๏ธ

const fruitSet = new Set(['oranges', 'apples']);

for (const value of fruitSet) {
  console.log(value); // "oranges" "apples"
}

 

โน forEach — set ๊ฐ’์„ ๋Œ€์ƒ์œผ๋กœ ๋ฐ˜๋ณต ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ โšก๏ธ

set.forEach ์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž value์™€ ๋‘๋ฒˆ์งธ ์ธ์ž valueAgain์€ ๋™์ผํ•œ ๊ฐ’์ด๋‹ค. map.forEach ๋ฉ”์„œ๋“œ๊ฐ€ value key map 3๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— set.forEach ์—ญ์‹œ 3๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๊ฒŒ๋” ํ•˜์—ฌ ํ˜ธํ™˜์„ฑ์„ ๊ฐ–์ถ”๊ฒŒ ํ•œ ๊ฒƒ.

const fruitSet = new Set(['oranges', 'apples']);

fruitSet.forEach((value, valueAgain, set) => {
  console.log(value); // oranges apples
  console.log(valueAgain); // oranges apples
  console.log(set); // Set(2) {'oranges', 'apples'}...
});

 

Map / Set ์‚ฌ์šฉ ์˜ˆ์ œ


๋ฌธ์ œ ์ถœ์ฒ˜ JavaScript Info

 

์ค‘๋ณต๊ฐ’ ์ œ๊ฑฐ

๋ฐฐ์—ด ์š”์†Œ์˜ ์ค‘๋ณต๊ฐ’์„ ์ œ๊ฑฐํ•ด์ฃผ๋Š” unique(arr) ํ•จ์ˆ˜ ์ž‘์„ฑ. ๋ฐฐ์—ด ์š”์†Œ๋Š” ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์ด ๋  ์ˆ˜ ์žˆ์Œ.

function unique(arr) {
  // TODO
}

let values = [
  'Hare',
  'Krishna',
  'Hare',
  'Krishna',
  'Krishna',
  'Krishna',
  'Hare',
  'Hare',
  ':-O',
];

console.log(unique(values)); // `Hare, Krishna, :-O`๋งŒ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•จ
๋”๋ณด๊ธฐ
function unique(arr) {
  return [...new Set(arr)]; // ํ˜น์€ return Array.from(new Set(arr))
}

let values = [
  'Hare',
  'Krishna',
  'Hare',
  'Krishna',
  'Krishna',
  'Krishna',
  'Hare',
  'Hare',
  ':-O',
];
console.log(unique(values));

 

์• ๋„ˆ๊ทธ๋žจ ํ•„ํ„ฐ

์• ๋„ˆ๊ทธ๋žจ์€ ๋‹จ์–ด๋‚˜ ๋ฌธ์žฅ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌธ์ž์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ” ๋‹ค๋ฅธ ๋‹จ์–ด๋‚˜ ๋ฌธ์žฅ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋†€์ด

nap — pan
ear — are — era
cheaters — hectares — teachers

 

์—๋„ˆ๊ทธ๋žจ์œผ๋กœ ๋งŒ๋“  ๋‹จ์–ด๋ฅผ ๊ฑธ๋Ÿฌ๋‚ด๋Š” aclean(arr) ํ•จ์ˆ˜ ์ž‘์„ฑ. ์—๋„ˆ๊ทธ๋žจ ๊ทธ๋ฃน์—์„œ ํ•œ ๋‹จ์–ด๋Š” ๋‚จ์•„์žˆ์–ด์•ผ ํ•จ

function aclean(arr) {
  // TODO
}

let arr = ['nap', 'teachers', 'cheaters', 'PAN', 'ear', 'era', 'hectares'];
console.log(aclean(arr)); // "nap,teachers,ear"๋‚˜ "PAN,cheaters,era"์ด ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•จ
๋”๋ณด๊ธฐ

map์€ ๋™์ผํ•œ key๋ฅผ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น `key`์˜ `value`๋ฅผ ๋ฎ์–ด ์“ด๋‹ค. `sorted` ๋ณ€์ˆ˜์—” ํ˜„์žฌ ์ˆœํšŒํ•˜๋Š” `word`๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ณ , ๋‹จ์–ด๋ณ„๋กœ ์ชผ๊ฐœ๊ณ , ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ , ๋‹ค์‹œ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์นœ๋‹ค. 

 

1. `nap` ๋ฌธ์ž์—ด์€ ์ •๋ ฌ ํ›„ `anp`๊ฐ€ ๋œ๋‹ค. `map`์—” `anp`(key), `nap`(value) ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

2. `PAN` ๋ฌธ์ž์—ด์€ ์ •๋ ฌ ํ›„ `anp`๊ฐ€ ๋œ๋‹ค. ๊ธฐ์กด ์ €์žฅํ–ˆ๋˜ ๋™์ผํ•œ ํ‚ค `anp`์ด๋ฏ€๋กœ, `anp`์˜ `value`๋ฅผ ๋ฎ์–ด์“ด๋‹ค. 

3. ๋ฐ˜๋ณต...

const sorted = word // PAN
  .toLowerCase() // pan
  .split('') // ['p','a','n']
  .sort() // ['a','n','p']
  .join(''); // anp

 

์ฐธ๊ณ ๋กœ `sort()` ๋ฉ”์„œ๋“œ๋Š” ์•„์Šคํ‚ค์ฝ”๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. ์•ŒํŒŒ๋ฒณ `N`๊ณผ `n`์„ ๋น„๊ตํ•˜๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ(์ž‘์€ ๊ฒƒ ๋ถ€ํ„ฐ)์ผ ๋•Œ `N`์ด ๋” ์ž‘๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค. `N`์˜ ์•„์Šคํ‚ค์ฝ”๋“œ๋Š” `78`(10์ง„์ˆ˜), `n`์€ `110`(10์ง„์ˆ˜)์ด๊ธฐ ๋•Œ๋ฌธ.

function aclean(arr) {
  const map = new Map();

  for (const word of arr) {
    const sorted = word.toLowerCase().split('').sort().join('');
    map.set(sorted, word);
  }

  return [...map.values()];
}

let arr = ['nap', 'teachers', 'cheaters', 'PAN', 'ear', 'era', 'hectares'];
console.log(aclean(arr)); // [ 'PAN', 'hectares', 'era' ]

 

๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด ํ‚ค

keys.push()๊ฐ€ ์ž‘๋™๋˜๋„๋ก ์ˆ˜์ •

let map = new Map();
map.set('name', 'John');

let keys = map.keys();

// Error: keys.push is not a function
keys.push('more');
๋”๋ณด๊ธฐ
let map = new Map();
map.set('name', 'John');

let keys = [...map.keys()]; // ํ˜น์€ let keys = Array.from(map.keys())
keys.push('more'); // 2

 

๋ ˆํผ๋Ÿฐ์Šค


 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•