[Front-end๐Ÿฆ] #25 ํ•จ์ˆ˜, list method / 15~17์žฅ

๋˜์ƒยท2021๋…„ 12์›” 2์ผ
0

front-end

๋ชฉ๋ก ๋ณด๊ธฐ
39/58
post-thumbnail

1. ๋ฉ‹์‚ฌ ์ˆ˜์—…

1. ํ•จ์ˆ˜

์žฌ๊ท€ํ•จ์ˆ˜

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 () {}());

2. List.prototype.map(), filter, find

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๋กœ.

3. call by value

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

js call by value ํ€ด์ฆˆ

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 }

4. Map

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));

5. Set

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));

๊ต์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ, ๋ฐฐํƒ€์  ๋…ผ๋ฆฌํ•ฉ




2. Deep Dive

  1. let, const ํ‚ค์›Œ๋“œ์™€ block level scope ๋งํฌ
  2. property attribute ๋งํฌ
  3. ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๋งํฌ

์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ–ˆ๋‹ค.




3. ์ž‘์€ ํšŒ๊ณ 

์˜ค๋Š˜์€ 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) ๋ถ€๋ถ„, ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์— ๋Œ€ํ•ด์„œ ์ฝ์—ˆ๋‹ค.

  • ๋‚˜๋Š” ์–ธ์–ด๊ฐ€ ๋งž๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ƒฅ ์–ธ์–ด ๊ณต๋ถ€ํ•˜๊ณ  ๋™์ž‘ ์›๋ฆฌ ์‚ดํŽด๋ณด๋Š”๊ฒŒ ์žฌ๋ฐŒ๋‹ค. ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ๋ฌผ๋ก  ์žฌ๋ฐŒ์ง€๋งŒ!
  • property attribute๋Š” ์ง€๊ธˆ ๋‹น์žฅ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋Š” ์–ด๋ ค์šด ๋ถ€๋ถ„์ด๋ผ์„œ ๋ชจํ˜ธํ•˜๊ฒŒ ๋‹ค๊ฐ€์˜ค๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋ญ”์ง€๋Š” ์•Œ๊ฒ ๋Š”๋ฐ ๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ์“ฐ๋ผ๋Š”๊ฑฐ์ง€..? ์‹ถ์€.
  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜์—์„œ ๋‹ค๋ฃฌ this ๋ถ€๋ถ„์ด ์žฌ๋ฐŒ์—ˆ๋‹ค. Java์—์„œ๋Š” ๊ทธ๋ƒฅ ํ•จ์ˆ˜ ์•ˆ์—์„œ ํ•จ์ˆ˜ ์•ˆ์˜ ๊ฒƒ๊ณผ ์ „์—ญ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์šฉ๋„๋กœ๋งŒ ์ผ์—ˆ๋Š”๋ฐ ๊ทธ๊ฒŒ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์•ˆ์—์„œ ์“ฐ์ด๋Š” ๊ฒƒ๊ณผ ๊ทธ๋ƒฅ ํ•จ์ˆ˜์—์„œ ์“ฐ์ด๋Š” ๊ฒƒ, property์—์„œ ์“ฐ์ด๋Š” ๊ฒƒ์˜ ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ๊ฒƒ์ด ์žฌ๋ฐŒ์—ˆ๋‹ค.
profile
0๋…„์ฐจ iOS ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€