[JS] ์๋ฐ์คํฌ๋ฆฝํธ Map / Set ์๋ฃ๊ตฌ์กฐ
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
๋ ํผ๋ฐ์ค
- https://ko.javascript.info/map-set
- ํค๊ธฐ๋ฐ์ ์ปฌ๋ ์ - JavaScript | MDN
- [Javascript] Map and Set
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋ฆฌ์กํธ ๋ง์ฐ์ค ๋๋๊ทธ ๊ฐ๋ฅํ ์์ ๋ง๋ค๊ธฐ / ๊ธฐํ ํ๋กํผํฐ (0) | 2024.04.27 |
---|---|
[JS] ์๋ฐ์คํฌ๋ฆฝํธ URL ๊ฐ์ฒด / searchParams (0) | 2024.04.27 |
[Web] ์ธ์ vs ์ฟ ํค vs ํ ํฐ (0) | 2024.04.27 |
[JS] ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ฅผ ํ๋ณํ๋ 6๊ฐ์ง ๋ฐฉ๋ฒ (0) | 2024.04.27 |
[JS] ES Modules ๋ชจ๋ (Import / Export ์์คํ ) (0) | 2024.04.26 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[React] ๋ฆฌ์กํธ ๋ง์ฐ์ค ๋๋๊ทธ ๊ฐ๋ฅํ ์์ ๋ง๋ค๊ธฐ / ๊ธฐํ ํ๋กํผํฐ
[React] ๋ฆฌ์กํธ ๋ง์ฐ์ค ๋๋๊ทธ ๊ฐ๋ฅํ ์์ ๋ง๋ค๊ธฐ / ๊ธฐํ ํ๋กํผํฐ
2024.04.27 -
[JS] ์๋ฐ์คํฌ๋ฆฝํธ URL ๊ฐ์ฒด / searchParams
[JS] ์๋ฐ์คํฌ๋ฆฝํธ URL ๊ฐ์ฒด / searchParams
2024.04.27 -
[Web] ์ธ์ vs ์ฟ ํค vs ํ ํฐ
[Web] ์ธ์ vs ์ฟ ํค vs ํ ํฐ
2024.04.27 -
[JS] ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ฅผ ํ๋ณํ๋ 6๊ฐ์ง ๋ฐฉ๋ฒ
[JS] ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ฅผ ํ๋ณํ๋ 6๊ฐ์ง ๋ฐฉ๋ฒ
2024.04.27