Rest Parameter | Map | Maplterator | Filtering & Set | Set
- -
๋ชจ๋ ํฌ์คํ ์ ์ธํ๋ฐ ECMAScript6: ๋น ๋ฅด๊ฒ ๋ฐฐ์ฐ๋ ES6 ์คํฌ๊ณผ ๋น๋๊ธฐ ํ๋ก๊ทธ๋จ ์ ๋ด์ฉ์ ๋ด๊ณ ์์ผ๋ฉฐ
์ถ์ฒ๋ ์๋์ ์ฃผ์๋ก "๊นํํ"๋์ ์๋ฃ์ ๋๋ค.
์์ ์ ์ธ ์๋๊ฐ ์๋ ๊ณต๋ถํ ๊ฒ์ ์ ๋ฆฌํด๋๋ ๋ชฉ์ ์ผ๋ก ํฌ์คํ ํ ๊ฒ์ ๋๋ค.
www.inflearn.com/course/es6-ecmascript-6
1. Rest Parameter
# ๋๋จธ์ง ๋งค๊ฐ๋ณ์(rest parameter)
ES6์์๋ ํจ์์ ๋ํ ์ง์๋ฒ์๋ฅผ ํฌ๊ฒ ํ๋ํ๊ธฐ ์ํด ๊ฐ๋ณ ์ธ์์ ๋ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค.
๋ง์นจํ ์ธ๊ฐ๋ก ํํํ๋ ๋๋จธ์ง ๋งค๊ฐ๋ณ์ "..." ํค์๋๊ฐ ์ถ๊ฐ๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ "Rest Parameter"๋ผ๊ณ ํ๋ค. ์ด ํค์๋๋ ํจ์๋ฅผ ์ ์ธํ ๋ ๋งค๊ฐ๋ณ์์ ์ฌ์ฉ๋๋ค.
function myFunction(a,b,c,d, ...rest){
console.log(a,b);
console.log(rest);
console.log(rest.length);
}
myFunction(1,2,3,4,5,6,7,8);
์ ์์์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
myFunctionํจ์๋ ๋ค์ฏ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ rest parameter๋ฅผ ์ ์ํ์๋ค.ํจ์๋ฅผ ํธ์ถ ์, ๋๊ฒจ์ง ์ธ์๋ค ์ค 5๋ฒ์งธ ๋ถํฐ๋ ๋ฐฐ์ด๋ก ๋ฐ๋๋ค๋ ์๋ฏธ์ด๋ค.
๋ฐ๋ผ์ 3๋ฒ ๋ผ์ธ์์ 5,6,7,8์ ๊ฐ์ง ๋ฐฐ์ด์ด ์ถ๋ ฅ๋์๋ค. ๋ฐฐ์ด์ธ ์ ์ ์ด์ฉํด length์์ฑ์ ์ด์ฉํด ๊ธธ์ด๋ฅผ ๊ตฌํ ์๋ ์๋ค.
# ์ ๊ฐ ์ฐ์ฐ์(spread operator) **๋งค์ฐ ์ค์
ํจ์๋ฅผ ํธ์ถํ ๋ ์ด ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ๋ฐฐ์ด์ ํผ์ณ์ ์ฌ๋ฌ๊ฐ์ ์ธ์๋ก ๋๊ฒจ์ฃผ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์์๋ฅผ ์ดํด๋ณด์!
function rest(a,b,c,...rest){
console.log(b,c);
for(let i of rest){
console.log(i);
}
}
var spread = [2,3];
rest(1, ...spread, 4, ...[5,6];
๋งจ ๋์ค ๋ผ์ธ์ ๋ณด๋ฉด ...ํค์๋ ์ฆ ์คํ๋ ๋ ์ฐ์ฐ์ ํตํด ๋ฐฐ์ด์ด ํผ์ณ์ก๊ณ , 1,2,3 ์ธ๊ฐ์ ์ธ์๋ ์ ์ผ ์ฒซ ์ค a,b,c ํ๋ผ๋ฏธํฐ๋ก ๊ฐ๊ฐ ๋๊ฒจ์ก๋ค.
์ด๋ ๊ฒ ๋ณ์์ ํ ๋นํ์ง ์๊ณ ๋ ๋ฐฐ์ด์ ๋ฐ๋ก ์์ ๊ฐ์ด "..."ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ ํจ์์์ restํ๋ผ๋ฏธํฐ๋ 4,5,6์ ์ธ์๋ก ๋ฐ์๊ณ , ์์ฑ๋ rest iterator๋ for-of๊ตฌ๋ฌธ์ ํตํด ์ถ๋ ฅํ ์ ์๊ฒ๋ ๊ฒ์ด๋ค.
์ด์ฒ๋ผ ๋ฐ์ดํฐ๊ฐ ๋์ ์ผ๋ก ๋ฐ๋๋ ๊ฒฝ์ฐ ๊ฐ๋ณ์ธ์๋ฅผ ๋ค๋ฃฐ ๋ ๋งค์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ค.
์๋ ๋ธ๋ก๊ทธ ๊ธ์ ๋ณด์๋ฉด ์กฐ๊ธ ๋ ์์ธํ ์ดํด๊ฐ ๋ ๊ฒ ๊ฐ๋ค์!
# ์ ๋ฆฌํ๊ธฐ
๋๋จธ์ง ๋งค๊ฐ๋ณ์๋ ๋ ๊ฐ ์ด์์ ์์๋ฅผ ํ๋์ ์์๋ก ๋ชจ์ผ๋ ๊ฒ์ด์ง๋ง
์ ๊ฐ ์ฐ์ฐ์๋ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ฅผ ํ์ฅํ๋ ๊ฒ์ผ๋ก ๋๋จธ์ง ๋งค๊ฐ๋ณ์์ ๋์กฐ๋๋ค.
2. Map
# Map
์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋๋ฐ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ธ "Map๊ณผ Set"์ด ์ถ๊ฐ๋์๋ค.
Map์ key์ value๊ฐ ํ ์์ธ ์ปฌ๋ ์ ์ด๋ค.
javascript์์๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ด ํด๋น ๊ธฐ๋ฅ์ ์ํํ๊ณ ์์ง๋ง, ํน์ ๊ฐ์ด ์๋ ์ง ์ฐพ์๋ด๋ ค๋ฉด ๋ณ๋์ ์ฒ๋ฆฌ๊ณผ์ ์ด ํ์ํ์ฌ ๋ถํธํ๋ค.
์ ๋ ํค์๋๋ฅผ ์ด์ฉํด ๊ทธ๋ฌํ ํจ์๋ค์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ค.
์๋ ์์๋ฅผ ์ดํด๋ณด์
<script>
const myMap = new Map();
myMap.set("Lang","JavaScript");
</script>
์ด๋ ๊ฒ newํค์๋๋ก Map()์ ์์ฑํ๊ณ .set๋ฉ์๋๋ฅผ ํตํด ํค์ ๊ฐ์ ํ ๋นํ ์ ์๋ค.
๋ํ, set ๋ฉ์๋๋ ์ฐ์ํด์ ๋ฐ์ดํฐ๋ฅผ ํ ๋น ํ ์๋ ์๋ค. ์๋ ์์๋ฅผ ๋ณด์.
<script>
const myMap = new Map();
myMap.set("plugin","update").set("refactor",6).set("code",5);
</script>
map์ ์ด๊ธฐํ ํ๋ฉด์ ๋ฐฐ์ด๋ก ๊ฐ์ ํ ๋นํ ์๋ ์๋ค.
<script>
const myData = new Map([
["key1","value1"],
["key2", "value2"]
]);
const.log(myData.get("key1"));
</script>
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ด์ฒ๋ผ get๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ key์ ํด๋นํ๋ value๋ฅผ ์ถ๋ ฅํ ์๋ ์๋ค.
์ด์ ์ ํ์ตํ ๋ฐฉ์์ผ๋ก map์ ๋ด์ ํค์ ๊ฐ์ ๋ฐฐ์ด์ ๋ด์ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ง๋ค์ด๋ณด์.
<script>
const myMap = new Map();
const myMap = [["plugin","update"],["refactor",6],["code",5]];
for(let i of myArray){
myMap.set(...i);
}
myMap.delete("hello");
for(let [key, value] of myMap){
console.log(key + "," + value);
}
</script>
(์ ๊ฐ ์ฐ์ฐ์์ ๋ํ ์ค๋ช ์ ๋ฐ๋ก ์์ชฝ์ ํฌ์คํ ํด๋์์ต๋๋ค.)
iterator์ ๊ฐ๋ ์ด ํ์คํ ์๋ฟ์ง ์๋๋ค๋ฉด ์๋ ์ฃผ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ๊ณต๋ถํด๋ณด์!
developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Iterators_and_Generators
์ด ๋ฐฉ์์ for-of๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์๊ฐ ์๊ฒ ๋๋ค.
์ด์ฒ๋ผ set๋ฉ์๋์ ์ธ์ i์ ์ ๊ฐ ์ฐ์ฐ์๋ก myArray๋ฐฐ์ด์ ํ์ด map์ ๋ด์ ์ ์๋ค.
map์์ key๋ ๋งค์ฐ ๊ณ ์ ํ๊ณ , ์ ์ผํ๊ธฐ ๋๋ฌธ์ delete ๋ฉ์๋์ key๋ฅผ ๋ฃ์ด์ ์ญ์ ํ ์๋ ์๋ค.
์ด์ ๊ฐ์ด myMap๊ฐ์ฒด๊ฐ ๋ฃจํ๋ฅผ ๋๋ฉฐ return๋ ํ์์ let ์ ์ธ์ ์ค๋ฅธ์ชฝ์ ๋์ดํ์ฌ ๋์คํธ๋ญ์ฒ๋ง์ด ์ด๋ฃจ์ด์ก๋ค.
๋์คํธ๋ญ์ฒ๋ง ์ด๋?
lucete1230-cyberpolice.tistory.com/395?category=923624
์ด๋ฅผ ํตํด ํค์ ๊ฐ์ด ๋ณ๋์ ๋ณ์๋ก ๋ถ๋ฆฌ๋์์์ ํ์ธํ ์ ์๋ค.
์ดํด๋ฅผ ๋๊ธฐ ์ํด ์ฝ๋๋ฅผ ๊ฑฐ์ ๋งค์ค ๋ง๋ค console๋ก ์ถ๋ ฅํ์๋ค.
1. ์ฒ์ map์ ๊ฐ์ด ๋ค์ด๊ฐ๊ธฐ ์
2. myArray์ ๊ฐ์ ๋ฃ์ ํ
3. for-of๋ฌธ์ ํตํด์ myArray๊ฐ์ myMap์ set ํด์ค (๋ด์์ค)
4. delete๋ ๊ณ ์ ํ ํค๊ฐ์ ์ ๋ ฅํ์ฌ map์ ๊ฐ์ ์ง์ธ ์ ์์. ํ์ฌ plugin์ ์ง์์ค ์ํ
3. MapIterator
# MapIterator ํ์ฉ
for-of ๊ตฌ๋ฌธ์ ์ด์ฉํด map์ ์ํํ ์ ์์๋ค. ์ด์ฒ๋ผ map์ for-of ์ด ์ธ์๋ ๋ค์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํด์ค๋ค.
๋ํ์ ์ผ๋ก for-of, entries(), next(), keys(), values() ๋ฑ๋ฑ...
์๋์ ์์๋ก ํ๋ฒ์ ์ดํด๋ณด์.
<script>
const myMap = new Map();
const myArray = [["name","haeun"],["age",23],["hobby","piano"]];
for(let i of myArray){
myMap.set(...i);
}
const myKeys = myMap.keys(),
myValue = myMap.values(),
myIter = myMap.entries();
console.log(myKeys);
console.log(myValue);
console.log(myIter);
</script>
๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
keys ๋ฉ์๋์ valuse๋ฉ์๋๋ ๊ฐ๊ฐ key์ value๋ฅผ ๊ฐ์ผ๋ก ๊ฐ์ง๋ Map Iterator๋ฅผ ๋ฐํํ๊ณ ,
entries()๋ [key, value]๋ฅผ ๊ฐ์ง๋ MapIterator๋ฅผ ๋ฐํํ๋ค.
๋ฐ๋ณต๋ฌธ์ for-of๊ฐ ์๋ ์๋์ผ๋ก ํ์ธํด๋ณด์.(for-of์ ์ญํ ์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ ๊ฒ. ์ถ๋ ฅ ์ next()๋ก ๋ค์ ๋ฐฐ์ด ๊ฐ์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๋ ค๋ ๊ฒ์)
iterator๋ next๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
<script>
const myMap = new Map();
const myArray = [["name","haeun"],["age",23],["hobby","piano"]];
for(let i of myArray){
myMap.set(...i);
}
const myKeys = myMap.keys(),
myValue = myMap.values(),
myIter = myMap.entries();
console.log(myIter.next());
console.log(myIter.next());
console.log(myIter.next());
console.log(myIter.next());
</script>
๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
์ด๋ ๊ฒ next๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ return๊ฐ์ done์ด true (๋์ ์๋ฏธ)๊ฐ ๋ ๋๊น์ง ์ํํ ์๋ ์๋ค.
4. Filtering & Set
# map ํํฐ๋ง ์ค์ต
map์ ํน์ ์กฐ๊ฑด์ผ๋ก ํํฐ๋ง ํ์ฌ ๋ค๋ฅธ map์ ๋ด์๋ณด์.
<script>
const myMap = new Map();
const myArray = [["name","haeun"],["age",23],["hobby","piano"]];
for(let i of myArray){
myMap.set(...i);
}
const newMap = new Map (
[...myMap].filter(([a,b])=>b==23));
console.log(newMap);
</script>
์๋จ์ myMap์์ ์ค๊ฐ์ ํด๋นํ๋ ๊ฐ๋ง ์๋ก์ด map์ ๋ด์ ๊ฒ์ด๋ค. (์ด๋ถ๋ถ -> ["age",23])
์ถ๋ ฅ๊ฒฐ๊ณผ : Map {"age" => 23}
์ด์ ๊ฐ์ด ๋งต์ ์ ๊ฐ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ด์ ๋ฐฐ์ด๋ก ๋ฐํํด์ฃผ๋ฏ๋ก, ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
# Set
javascript์ ๋ฐฐ์ด๊ณผ ์ ์ฌํ์ง๋ง, ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค๋ ์ ์์ ์ฐจ์ด๊ฐ ์๋ค. ์ฆ, ์ค๋ณต์ ํ์ฉํ์ง ์๋ ์งํฉ์ ๋งํ๋ค.
map()๊ณผ ์ฌ์ฉ๋ฒ์ด ๋งค์ฐ ๋น์ทํ์ง๋ง, ํฐ ์ฐจ์ด์ ์ key๊ฐ ์์ด value๋ง ์กด์ฌํ๋ค๋ ์ ์ด๋ค.
์์๋ฅผ ์ดํด๋ณด์.
<script>
var set = new Set();
set.add("ECMAScript").add("6");
console.log(set.has("ECMAScript"));//๊ฐ์ด ์กด์ฌ -> true
console.log(set.has("haeun")); //์กด์ฌํ์ง ์๋ ๊ฐ -> false
console.log(set.size);
console.log(...set.values());
</script>
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
has() : ํด๋น ๊ฐ์ ์กด์ฌ ์ฌ๋ถ ํ์ธ
size() : ๊ฐ์ ํ์ธ
set์ ์ค๋ณต์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฐ์ด ์๋ค๋ฉด ์ถ๊ฐ๋ก ์ฝ์ ํ๋ ค ํด๋ ์๋ฌด๋ฐ ๋ณํ๊ฐ ์๋ค
# ์ ๋ฆฌํ๊ธฐ
- Map์ key์ value๊ฐ ํ ์.
- Set์ value๋ก๋ง ์ด๋ฃจ์ด์ง ์งํฉ
'Languages > Java Script' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Promise & then | chaining & catch | all (0) | 2021.02.15 |
---|---|
Generator & yield | yield* | return (0) | 2021.02.15 |
Iterator & for-of | Symbol | [Symbol.iterator()] (0) | 2021.02.15 |
Arrow Function & this | IIFE | Default Parameter (0) | 2021.02.15 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค