프론트엔드/JS

함수 합성 코드 작성 앞서 flatten에 대해서 배웠는데 이 flatten을 활용해 아래와 같이 함수를 합성하여 활용하곤 한다. 예를 들면 아래와 같다. go(arr, L.flatten, L.filter(a => a % 2), L.map(a => a * a), take(4), reduce(add), log); 위와 같은 함수를 매우 많이 사용하게 되는데, 실무적인 데이터를 사용해서 더 명확하게 이해할 수 있다. 지연성 / 이터러블 중심 프로그래밍 실무적인 코드 const user = [ { name: 'a', age: 21, family: [ { name: 'a1', age: 53 }, { name: 'a2', age: 47 }, { name: 'a3', age: 16 }, { name: 'a4', a..
flatMap flatMap은 최신 자바스크립트 스펙에 등장하는 함수로, map과 flatten을 동시에 수행하는 함수다. console.log([[1, 2], [3, 4], [5, 6, 7]].flatMap(a => a)); // (7) [1, 2, 3, 4, 5, 6, 7] 이렇게 기본 Array 프로토타입의 flatMap 메서드를 사용하면 하나의 배열로 만들어주며, 함수를 적용한다. 이는 배열이 아닌 값이 원소로 들어가도 동일하게 작동한다. console.log([[1, 2], [3, 4], [5, 6, 7], 8, 9, [10]].flatMap(a => a)); // (10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 여기서 함수를 다르게 하여 flatMap을 최대한 활용할 수 있다..
L.flatten 함수 flatten이라는 함수를 만들고자 한다. 해당 함수는 임의로 배열이 섞여 있는 배열을 하나의 배열로 전환해주는 함수다. 또한, 지연 평가를 적용할 수 있는 함수다. 예를 들어, 아래와 같은 배열이 있다고 한다면 [[1, 2], 3, 4, [5, 6], [7, 8, 9]]; 이를 하나의 배열로 처리해 아래와 같이 만들어 줄 수 있다. [1, 2, 3, 4, 5, 6, 7, 8, 9] 이제 본격적으로 함수를 생성한다. const isIterable = a => a && a[Symole.iterator]; L.flatten = function *(iter) { for (const a of iter) { if (isIterable(a)) {} for (const b of a) yield..
L.map으로 map 만들기 이터러블 객체를 순회하면서 일괄적으로 함수를 적용하는 map 함수를 지연평가를 적용한 L.map을 통해서 구현할 수 있다. 먼저 L.map의 코드는 아래와 같다. L.map = curry(function *(f, iter) { iter = iter[Symbol.iterator](); let cur; while (!(cur = iter.next()).done) { const a = cur.value; yield f(a); } }); 그리고 map 코드는 아래와 같다. const map = curry((f, iter) => { let res = []; iter = iter[Symbol.iterator](); let cur; while (!(cur = iter.next()).don..
턴태
'프론트엔드/JS' 카테고리의 글 목록