복습(고차함수)
1. pipe함수는 아래와 같이 사용할 수 있다.
function pipe(...funcs) { //투입될 함수의 갯수를 알 수 잆기 때문에 배열로 받아온다. (... funcs는 funcs라는 함수 배열을 풀었다는 의미)
return function(num){ //함수를 리턴해야 한다는 의미는 return function을 사용하길 원하는 것이고 매개변수는 num을 쓸 것이다(아니라도 상관은 없다 변수니까)
let result = funcs[0](num); //첫번째(index 0) 함수값 저장
for(let i = 1 ; i < funcs.length ; i++){ //두번째 함수부터 최종함수(길이-1 = 갯수)까지의 반복시행
result = funcs[i](result); //이전 함수의 결과값을 다음 함수에 넣고 결과로 저장
}
return result //for문으로 모든 함수의 시행이 끝난 후 결과값을 반환한다.
}
}
//함수를 리턴해야 한다는 의미는 return function을 사용하길 원하는 것이고 매개변수는 num을 쓸 것이다(아니라도 상관은 없다 변수니까)
//일단 얼마나 많은 함수가 나올지 모르지만 배열이니 0 부터 funcs.length보다 작은 수 까지 반복하면 되고
//funcs[0](num)이 되는지 모르겠지만 외부에 하고 위에 0부터를 1부터로 고치면 될 것 같다.
// 그리고 저 result를 최종적으로 리턴한다
2. 반복문을 사용할 때 간결하게 사용하자.
let el of arr / let el in obj 자주 사용하긴 하지만 이번 주 작성한 내용중 배열 내부를 전부 조회하는 경우에도 i=0 ~ i<arr.length를 사용하는 모습이 종종 발견된다.
전체조회 of 또는 in을 사용하는 편이 가독성도 더 좋을 것 같다.
3.필터와 유사한 기능을 만들고 싶은 경우 for문 of를 사용해 전체 조회를 하고 내부에서 result등의 신규 배열에 true일 경우 push해주는 방식으로 만들 수 있다.
4.전체적으로 다시 보니 문제가 어려운 것은 아니었고 filter, map, reduce의 사용법에 대한 학습 수준이었던 것 같다.. 나중을 위해 간단하게 정리하자면
arr.filter(boolean반환하는 함수) = true값인 값만 통과한 객체/배열
arr.map(함수) = 함수가 적용된 값들로 이뤄진 배열 또는 객체?(객체[키] 예를 들면 obj.age 같이 오브젝트 내부에 있는 객체의 나이값에 +1씩 해준다던지? 하는 경우 사용)
arr.reduce(함수(축적값,현재값),초기값)으로 설정하며 acc축적,cur(현재) 등으로 적어두며 초기값은 곱셈인 경우 1, 덧셈 및 뺄셈의 경우 0, 스트링값의 조절인 경우 '', 배열의 변경등에는 []등으로 초기값을 잡아주며 초기값을 적지 않은 경우 축적값에는 첫번째 값이 들어가기 때문에 주의해야 한다(예를 들어 배열에 넣고 싶은데 배열이 아닌 값이 첫번째라면 값에다 값을 push..?? 그런 이상한 일이 벌어질지도)
5. reduce의 사용법 중 하나인 비교는 아래와 유사하게 작동한다.
const getLongest = arr.reduce(function(acc,cur){
if(acc.length < cur.length){ //기존 길이(또는 조건)보다 현재 길이(또는 조건이) 더 큰 경우(또는 원하는 수치인 경우)
acc = cur //축적값(비교대상)에 현재값을 넣어준다.
}
return acc //최종적으로 결정된 축적값을 출력(가장 큰, 작은, x와 같은 등을 해결해주며 x의 등장 횟수등으로 사용도 가능한 만능 메서드)
},'')
6.분해할당을 자연스럽게 쓸 수 있게 연습해야겠다. 그 전에도 몇번 사용했지만 이번에는 페어분이 사용하자고 해서 의아했지만 사용하고 넘어갔던 것 같은데(@@@를 보면?) 지금 보니 너무 쉽게 이해할 수 있었다. 하지만 언제 헷갈릴지 모르니 다시 보자
function joinArrayOfArrays(arr) {
return arr.reduce(function(acc,cur){ //acc는 빈배열, cur은 arr의 배열이 들어갈 예정이다.
acc.push(...cur); //@@@@@@@ //그러므로 그 배열을 뜯어서 다 넣어버린다!
return acc
},[]) //빈배열을 초기값으로 했기 때문에 push가 자연스럽다.
} //참고로 이 문제는 concat으로 쉽게 풀 수 있었다..
고차함수도 생각보다 할만한 것 같다.
과정이 너무 힘들어서 그렇지 과정을 버티기만 하면 그 전 단계는 가능해진다.
내일 과연 이번주 내용을 다 복습할 수 있을까?..