30일차, underbar
2021. 8. 30. 20:33
반응형
2021. 08. 30 월요일
1. Today's Key points!🔑
- 고차함수
- callback
- Underbar
2. 정리해보자!🧹
고차함수는 다른 함수를 인자로 전달받을 수 있다. 고차함수의 인자로 전달되는 함수를 콜백 함수(Callback function)이라고 한다. 고차함수는 다른 함수를 리턴할 수 있다.
오늘은 배열, 객체를 다루는 라이브러리 Underbar를 구현하면서 자바스크립트 내장 메소드가 어떻게 callback 함수를 활용하는지 학습했다. 그래서 바로 스프린트 과제를 복기해보고자 한다.
3. Sprint과제 복기!🧐
👉🏻_.each
_.each = function (collection, iteratee) { //collection은 배열 또는 객체이다. iteratee는 함수이다.
if(Array.isArray(collection)){ //collection이 배열이면
for(let i = 0; i < collection.length; i++){ // iteratee 함수에 배열의 요소, 인덱스, 배열 그자체를 전달해준다.
iteratee(collection[i], i, collection);
}
}
else { // 객체이면
for(let key in collection){ //객체의 값, 속성, 객체 그자체를 전달한다.
iteratee(collection[key], key, collection);
}
}
};
//forEach메소드는 for문 처럼 반복해주는 메소드이다.
👉🏻._indexOf
_.indexOf = function (arr, target) { //배열과 인덱스값을 찾고싶은 요소를 입력받는다.
let result = -1; //못찾으면 -1을 리턴하기위해 초기값을 -1로 할당. 그리고 중복되는 요소가 있으면 가장 앞의 인덱스를 리턴하기 위함.
_.each(arr, function (item, index) {
if (item === target && result === -1) { //배열안의 요소와 찾고싶은 요소가 일치하고, 찾은 요소가 첫번째 요소이면
result = index; //result에 index값 할당.
}
});
return result;
};
//왜 가장 앞의 인덱스를 찾게되는 것인가?
//위의 조건문에서 배열안의 item과 찾고자하는 target이 처음 일치했을 때, 처음 result값은 -1이기 때문에 조건문에 들어갈 수 있게되고,
//해당하는 인덱스값이 result에 할당이 되서 더이상 -1이 아니게 되므로 item과 target이 일치한다 하더라도 더이상 조건에 들어갈 수 없게된다.
//그래서 가장 앞의 인덱스가 리턴되는 것이다.
👉🏻_.filter
_.filter = function (arr, test) { //배열과 boolean값을 리턴하는 함수 즉, test함수를 입력받는다.
const newArr = [];
_.each(arr, function(element){
if(test(element)){ //test가 true이면
newArr.push(element); //해당하는 요소를 newArr에 담아준다.
}
})
return newArr;
}
👉🏻_.uniq
_.uniq = function (arr) { //배열을 입력받으면 중복되는 요소를 없애주는 메소드이다.
const newArr = []; // 중복된 요소를 제거한 것만 담기위한 배열
_.each(arr, function(element){
if(_.indexOf(newArr, element) === -1){ // 배열에 중복되는 요소가 없으면
newArr.push(element); // 그 요소를 newArr에 넣어준다.
}
})
return newArr;
};
👉🏻_.map
_.map = function (arr, iteratee) {//배열과 배열에 처리해줄 함수를 입력받는다.
const newArr = [];
_.each(arr, function(element){
newArr.push(iteratee(element)); //처리해줄 함수에 요소를 넣어 결과값을 newArr에 넣어준다.
})
return newArr;
};
👉🏻_.reduce
_.reduce = function (arr, iteratee, initVal) { //배열, 함수, 초기값
let result = initVal; //reduce함수는 결국 결과값에 값이 계속 누적이 된다. 초기값을 입력받은 초기값으로 설정
_.each(arr, function(item, idx, items){
if(initVal === undefined && idx === 0){ //입력받은 초기값이 없을경우,
result = item; //배열의 첫번째 요소를 할당한다.
}
else { //그 외에는
result = iteratee(result, item, idx, items); //result에 결과값을 중첩시켜준다.
}
});
return result;
};
반응형
LIST
'코드스테이츠 수강 TIL > Section 2' 카테고리의 다른 글
32일차, 비동기 fetch API (0) | 2021.09.01 |
---|---|
31일차, 비동기 타이머API / fs 모듈 (0) | 2021.09.01 |
29일차, Graph, Tree (0) | 2021.08.28 |
28일차, Stack Queue (0) | 2021.08.27 |
27일차, 재귀함수 stringify, DOM작성 (0) | 2021.08.25 |