diff --git "a/\354\261\225\355\204\260_12/\353\205\270\354\230\210\354\260\254.md" "b/\354\261\225\355\204\260_12/\353\205\270\354\230\210\354\260\254.md" new file mode 100644 index 0000000..ba3c2f6 --- /dev/null +++ "b/\354\261\225\355\204\260_12/\353\205\270\354\230\210\354\260\254.md" @@ -0,0 +1,70 @@ +12장에서는 함수형에서 사용하는 가장 대표적인 도구 3가지를 살펴본다. map, filter, reduce이다. 이 3가지 도구를 언제 사용하며, 어떻게 만들어져있는지, 어떤 유익이 있는지 이해한다. + +## 함수형 도구 : map() + +```js +function map(array, f) { + var newArray = []; + forEach(array, function (element) { + newArray.push(f(element)); + }); + return newArray; +} +``` + +- map은 x값이 있는 배열을 y값이 있는 배열로 변환한다고 볼 수 있다. 변환을 하려면 x를 y로 바꾸는 함수가 필요하다. +- 근데 만약 map에 넘기는 콜백이 액션이면, map을 사용하는 코드도 액션이 된다. + +## 함수형 도구 : filter() + +```js +function filter(array, f) { + var newArray = []; + forEach(array, function (element) { + if (f(element)) newArray.push(element); + }); + return newArray; +} +``` + +- filter는 배열에서 일부 항목을 선택하는 함수로 볼 수 있다. +- 항목을 선택하기 위해서 x를 받아 불리언 타입을 리턴하는 함수를 전달해야 한다. true면 항목을 유지하고, false면 항목을 없앤다. + +사용 : + +```js +filter(customers, function (customer) { + return customer.purchases.length === 0; +}); +``` + +## 함수형 도구 : reduce() + +```js +function reduce(array, init, f) { + var accum = init; + forEach(array, function (element) { + accum = f(accum, element); + }); + return accum; +} +``` + +- reduce는 배열을 순회하면서 값을 누적한다. 값을 누적하는 것은 추상적인 개념이다. +- 주의해야 할 점은 인자의 순서다. + +```js +function min(numbers) { + return reduce(numbers, Number.MAX_VALUE, function (m, n) { + if (m < n) return m; + else return n; + }); +} + +function max(numbers) { + return reduce(numbers, Number.MIN_VALUE, function (m, n) { + if (m > n) return m; + else return n; + }); +} +```