오늘은 머리가 터지는 날이다. 잠도 많이 못잔 탓에 조금 무기력했다. 어제 미리 예습을 안했다면 아마 뻗었을 것이다. 예습하길 잘했다. 오늘 페어 팀원분이 너무 잘하셔서 진행이 좀 빨랐다. 진행이 빠른 만큼 복습할 시간도 많이 늘어나 좋았다.
오늘 배운 고차함수에 대해 조금 설명하자면.
고차함수는 함수를 인자로 받거나 함수를 리턴하는 함수이다.
함수라는 말이 참 많이 나오네? 보기만 해도 어지럽다. 그러나 배우면서 느끼는 건 for/ while 같은 반복문을 굳이 쓰지 않아도 더욱 간단하게 결과를 낼 수 있다는 것이다. 그러나 간단할수록 이해하기 어려운 것이다. 나와 나의 팀원분은 이해를 포기하고 그냥 이렇게 작동하는 구나 하고 넘겼다. 그게 맘이 편하다. 아무리 검색을 해봐도 우리수준에 맞는 설명이 없었다... ㅠㅠㅠㅠ
고차함수에서 가장 힘들었던 것은 내장고차함수 부분이었다. filter/ map/ reduce. 필터와 맵은 어느 정도 이해가 갔다. 함수안에 들어가는 함수를 선언할 때 매개변수가 하나여서 비교도 쉬웠고 적응도 빨랐다. 그러나 여전히 이해가 안되는 것은 매개변수를 아무거나 선언해줘도 알아서 엘리먼트를 하나하나씩 넣어 주는 것이었다. 배열/ 객체의 for of/ for in 문을 처음 볼 때의 기분이다.
순조롭게 잘 진행하다가. 진짜 토 나올 정도로 힘든 reduce를 만났다. 처음에 팀원분과 나는 당황을 하였고 수십분 동안 찾아 보았다. 우린 이해를 포기하고 그냥 받아들이기로 했다.
가장 어려웠던 것을 한번 보자.
const animals = [
{
score: 90,
animal: 'bird',
},
{
score: 75,
animal: 'bird',
},
{
score: 77,
animal: 'snake',
},
{
score: 100,
animal: 'snake',
},
{
score: 50,
animal: 'bird',
},
];
객체를 요소로한 배열이 있다. 여기서
function sumScore(animals, value) {
}
animals에 객체를 갖는 배열을 집어넣고, value에 객체의 animal 속성값을 넣어 그 값이랑 일치하는 동물의 score를 모두 합산하는 것! 조건은 반복문x/ 빈 배열을 입력받을경우 0을 리턴.
고민을 엄청나게 하다가 내린 결론은 filter를 이용하여 먼저 value와 같은 속성값을 가진 객체만 뽑은 후 reduce로 합을 구하자였다.
그러나 문제는 filter를 많이 써보지 못한 난 설령 조건에 부합한 객체를 찾는다고해도 그것을 배열의 형태로만 산출하는 것인지 객체를 포함한 배열을 산출하는 것인지 몰랐다. 먼저 실험을 해보았다.
function sumScore(animals, value) {
return animals.filter(function (n) {
return n.animal === value;
});
}
console.log(sumScore(animals,'snake'));
console.log(sumScore(animals,'bird'));
여기 까지만 완성하고 확인해보았다.
결과는 성공적이었다. 여기서 reduce를 써서 score를 합쳐보자.
function sumScore(animals, value) {
let socre = animals.filter(function (n) {
return n.animal === value;
});
return socre.reduce(function (acc, cur) {
return acc + cur.score;
},0);
}
console.log(sumScore(animals,'snake'));
console.log(sumScore(animals,'bird'));
console.log(sumScore(animals,'dog')); // 객체 속성값에 없는 값을 넣었을 때.
console.log(sumScore([],'bird'));// 빈 배열을 넣었을 때.
결과는?
성공!!!
배우면서 조금 힘들었지만 재밌었다. 3주 차로 넘어오면서 난이도가 급상승 되어서 조금 당황했지만 또 하나하나 해결해 나가는 맛이 있구나! 얼른 이것들을 나 스스로 유연하게 다루고 내 것을 직접 만들 수 있는 날이 오기를 ...