2022.5.27. (금)
1. 오늘의 소감
- 오늘은 배열의 고차함수들을 직접 구현해보는 과제를 진행했다. 콜백함수 생각하며 코드를 짜다보니 머리가 아프긴 했는데, 솔직히 조금 어려운만큼 정말 재밌었다. 나에게 딱 맞는 난이도랄까? 물론 어드밴스드 단계의 마지막 문제(_.sortBy) 와 나이트메어 단게는 손도 못댔지만….;;
- underscore.js 라이브러리 레퍼런스 참고하기!
- 실시간 세션에서 크루님이 BareMinimum 코드를 보여주셨는데, 내가 짠 것보다 훨씬 깔끔해서 놀랐다. 특히 _.reduce 함수 부분은 내가 생각지도 못한 로직으로 푸셔서 많은 공부가 되었다. 자세한 내용은 아래에!
- 내가 처음 짠 리듀스 코드…
_.reduce = function(arr, iteratee, initVal) {
let acc;
let cur;
let startIdx;
if(initVal === undefined){
acc = arr[0];
cur = arr[1] !== undefined ? arr[1] : undefined;
startIdx = 1;
} else {
acc = initVal;
cur = arr[0];
starIdx = 0;
}
_.each(arr, function(ele, idx){
if(idx >= startIdx){
acc = iteratee(acc, ele, idx, arr);
}
}
}
- 크루님이 짜신 코드…
_.reduce = function(arr, iteratee, initVal) {
let acc = initVal;
_.each(arr, function(ele, idx, arr){
if(acc === undefined){
acc = arr[0];
//acc = arr[0], ele = arr[0]
//초기값이 없을 때, 첫번째 요소에서 iteratee 실행은 건너 뜀
} else { //acc = arr[0], ele = arr[1];
acc = iteratee(acc, ele, idx, arr);
}
})
return acc;
}
⇒ reduce 는 초기값이 없을 때 acc = arr[0], cur = arr[1] 이 세팅된다. 이걸 나는 정말 의미 그대로 풀어서 밖에 구현할 수 없었다. 그런데 크루님은 이걸 “그럼 첫번째 반복에서는 acc 에 arr[0] 만 넣어주고, iteratee 실행을 안하면, 두번째 반복에서는 자연스럽게 acc = arr[0], cur = arr[1] 이 세팅되겠구나!” 로 풀으신 게 놀라웠다!! 멋지다. 이런 추론력…
728x90
반응형
'TIL' 카테고리의 다른 글
[TIL] #22. 재귀 (0) | 2022.12.06 |
---|---|
[TIL] #21. 리액트와의 첫만남 (0) | 2022.12.06 |
[TIL] #19. 프로토타입 (0) | 2022.12.06 |
[TIL] #18. 객체 지향 프로그래밍 (0) | 2022.12.06 |
[TIL] #17. 고차함수 (0) | 2022.12.06 |