์ฌ๊ทํจ์
function reverse(str) { str += '' if (str.length == 1) { return str } else { return reverse(str.slice(1)) + str[0]; } }
reverse('hello'); reverse('ello') + 'h' reverse('llo') + 'e' + 'h' reverse('lo') + 'l' + 'e' + 'h' reverse('o') + 'l' + 'l' + 'e' + 'h' 'o' + 'l' + 'l' + 'e' + 'h' 'olleh'
ํผ๋ณด๋์น ์์ด์ฒ๋ผ ํจ์๋ฅผ ์ฌ๋ฌ๋ฒ ํธ์ถํด์ return ํ๋ ๊ฒฝ์ฐ๋ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ด ์์ข๋ค.
// ๋ฉ๋ชจ๋ฆฌ๋ผ์ด์ ์ด์ // ํจ์ return ๊ฐ์ ์บ์ฑํด๋๊ณ ์ฌ์ฉํ๋ค๋ฉด? ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ๋ง์ ์ ์์. let fibo_cache = []; function fibo(n) { if (n in fibo_cache) { return n; } fibo_cache[n] = n < 2 ? n : fibo(n-2) + fibo(n-1) return fibo_cache[n]; }
// , ์ฐ๊ธฐ๋ฅผ ์ฌ๊ท๋ก ๋ง๋ ๋ค๋ฉด? function comma(reversedText) { reversedText += '' if (reversedText.length < 3) return reversedText; return reversedText.slice(0,3) + ',' + comma(reversedText.slice(3)) }
// ์๋ค์ง๊ณ ํ๋ ๋ฒ function comma2(text) { text += '' return (text.length <= 3) ? text : comma2(text.slice(0, text.length-3)) + ',' + text.slice(text.length-3); }
์ฆ์ ์คํ ํจ์
(function () {}());
map
let arr =[1, 3, 5, 3, 5]; let value = arr.map(x => x*2); // [2, 6, 10, 6, 10] //ํจ์๋ฅผ ์ธ์๋ก ๊ฐ์ง๋ค. function ์ ๊ณฑ(n) { return n ** 2; } let val = arr.map(์ ๊ณฑ); //์ ๊ณฑ์ ์ฝ๋ฐฑํจ์.
arr.map(x => x**2).reduce((x, y) => x + y); let arr2 = [[1,2,3], [4,5,6], [7,8,9]]; arr2.map(x => x.map(x => 2*x)); // 2์ฐจ์ ๋ฐฐ์ด ์ ์ฒด 2๋ฐฐ.
arr.reduce((x, y) => x + y); // ์ดํฉ์ ๊ตฌํ ใ ใ ์๋ค. // Arrow function reduce((previousValue, currentValue) => { ... } ) reduce((previousValue, currentValue, currentIndex) => { ... } ) reduce((previousValue, currentValue, currentIndex, array) => { ... } ) reduce((previousValue, currentValue, currentIndex, array) => { ... }, initialValue)
arr.filter( x => x.section === "section3" ); // ํจ์์ return์ด true๊ฐ ๋๋ ๋ชจ๋ ๊ฒ์ ๋ด์ ๋ฐฐ์ด์ ๋ฐํ. arr.find( x => x.id === "ddosang" ); // ์์ ๊ฐ์ผ๋ ์ฒซ๋ฒ์งธ๋ก ์ฐพ์ผ๋ฉด ๋ฉ์ถค. -> ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ด ์ข๋ค. ์์ด๋ ๊ฐ์๊ฑด ์ค๋ณต๋ ์ผ์ด ์์ผ๋๊น filter ๋ง๊ณ find๋ก.
Call by value, reference, sharing
js ๋ ๋ชจ๋ call by value. reference type ์ ์ธ์๋ก ๋๊ธฐ๋ฉด reference type์ ๋ณต์ฌํด์ ์ฌ์ฉํจ.let x = [10, 20, 30]; // ์ฃผ์๊ฐ์ ๋ฐ์. [10,20,30] ์ ๊ฐ๋ฅดํค๊ฒ ๋จ. function test(a) { a[0] = 10000; // x ๋ฅผ ๊ฐ์ง๊ณ ์ค๊ธด ํ์ผ๋, a๋ผ๋ ์ธ์ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ๊ฒ ์๋๋ผ ๊ทธ ์์ ๊ฐ์ ๋ณ๊ฒฝํ ๊ฒ์ด๋ฏ๋ก ๋ณต์ฌํด์ ์ฐ๋ ๊ฒ์ด ์๋๋ผ x ์์ฒด๊ฐ ๋ณ๊ฒฝ๋๊ฒ ๋จ. // a = [10000, 20, 30]; ์ด๋ ๊ฒ ํด๋ฒ๋ฆฌ๋ฉด ๋ณต์ฌํด์์ ์ฐ๊ธฐ ๋๋ฌธ์ x๋ ๋ฐ๋์ง ์๋๋ค. } test(x); console.log(x); // 10000, 20, 30
var a = {}; var func = function(b) { b = (b.a=1); b.b = 2; } func(a); console.log(a); //a๊ฐ ๋ค์ด๊ฐ๊ณ b์ a๋ ๋ชจ๋ {}๋ฅผ ๊ฐ๋ฅดํจ๋ค. //๊ทธ๋ฐ๋ฐ, (b.a = 1)์์๋ ์์ง ์ธ์ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ ๊ฒ์ด ์๋๋ผ, ์์ ํ๋กํผํฐ๋ฅผ ๊ฑด๋๋ฆฐ ๊ฒ์ด๋ฏ๋ก a= { a : 1 } ์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฐ์ฒด๋ฅผ b(argument)์ ํ ๋นํ๋ฉด์!!! ๋ณต์ฌ๋ฅผ ํด์ค๊ฒ ๋๋ค. b = { a : 1 } b.b = 2 ๋ ๋ณ๊ฐ์ ๋ณต์ฌ๋ ๊ฐ์ฒด์์ ๋์ํ๋ ๊ฒ์ด๋ฏ๋ก a= { a : 1 }
Map : key - value ์์ ๊ฐ์ง๋ ์๋ก์ด type (object ์ด๋ค)
let m = new Map(); m.set('ํ๋', 1); m.set('ํ๋', '1'); // key ๊ฐ ์ด๋ฏธ ์์ผ๋ฉด ๊ต์ฒด๋จ. m.set(1, 'ํ๋') m.get('ํ๋') m.keys() m.has('ํ๋') m.delete('ํ๋') m. // Object์์ ์ฐจ์ด์ ! obj๋ key์ string๋ง ๋ค์ด๊ฐ๋๋ฐ Map์ ์๋ฌด๊ฑฐ๋ ๋ค ๋ฃ์ ์ ์๋ค. ๋ฐฐ์ด obj ๋ค ๋จ. m.set('key', [a, b, c]); m.set('key', {a:'a', b:'b'}); m.set({a:'a', b:'b'}, 'a'); // ๊ทธ๋ฆฌ๊ณ Object๋ ํฌ๊ธฐ๋ฅผ ์๋ ค์ฃผ๋ method๊ฐ ์๋๋ฐ Map์ ์๋ค. m.size // ํฌ๊ธฐ ์ฝ๊ฒ ์ ์ ์๋ค.
// key - value ์ฒ๋ผ 2๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ง data๋ Map์ ๋ฃ์ด์ key-value๋ก ๊ตฌ์ฑํ ์ ์์. const o = { a: 'a', b: 'b' }; let temp = new Map([[1, 10], [2, 20], [3, 30], [4, 40]]); temp = new Map(Object.entries(o));
Set
์ค๋ณต์ ํ์ฉํ์ง ์์.let a = new Set('asdfasdfasdfffff'); // {'a', 's', 'd', 'f' } let b = new Set('qweras'); a.delete('s'); a.has('a'); // ๋ช ์์ ์ธ index๋ ์์ง๋ง ์ฝ์ ์์๋๋ก ์์๋ฅผ ์ํํ ์ ์๋ค. let ๊ต์งํฉ = [...a].filter(x => b.has(x)) let ํฉ์งํฉ = new Set([...a].concat([...b])) let ์ฐจ์งํฉ = [...a].filter(x => !b.has(x));
์ ๋ํด ๊ณต๋ถํ๋ค.
์ค๋์ list built-in method ์ค์ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๋ filter, find, map ์ ๋ํด์ ๋ฐฐ์ฐ๊ณ
Map (key - value ์์ผ๋ก ์ด๋ฃจ์ด์ง ์ด๋ค ๊ฒ์ด๋ ๋ฃ์ ์ ์๋ ๊ฐ์ฒด), Set(์งํฉ, ์ค๋ณต ๋ถ๊ฐ๋ฅ) ์ด๋ผ๋ ๊ฐ์ฒด์ ๋ํด์ ๋ฐฐ์ ๋ค.
๋ฅ๋ค์ด๋ธ๋ var, let/cosnt scope ๋ถ๋ถ, property attribute (value, writable, enumerable, configruation / get, set / preventExtensions, seal, freeze) ๋ถ๋ถ, ์์ฑ์ ํจ์ ์ ๋ํด์ ์ฝ์๋ค.