반응형
[JS] Array 내장 메소드 reduce를 직접 구현해보자
모 기업 면접 질문으로 나온 reduce 직접 구현해보기...
헷갈려서 제대로 풀지 못했다. 너무 아쉽다.
지금 풀어보니 그렇게 어렵지 않아서 더욱 아쉽다. 왜 이걸 못 풀었을까?
🤔 패인 분석
'reduce가 원본 배열을 변경하는지 / 하지 않는지'가 헷갈렸다. (하지 않는다.)
지금 생각해보면 면접관분들한테 질문을 할 수도 있었던 부분인데, 당황해서 그냥 못했다.
원본 배열을 변경한다고 생각하고 풀면서 열심히 삽질만 했다. 하하! 🔨
console.log(reduce([1, 2, 3, 4], (acc, curr) => acc + curr, 0)); // 10
console.log(reduce([1, 2, 3, 4], (acc, curr) => acc + curr, 1)); // 11
console.log(reduce([1, 2, 3, 4], (acc, curr) => acc * curr, 0)); // 0
console.log(reduce([1, 2, 3, 4], (acc, curr) => acc * curr, 1)); // 24
다음과 같이 출력되도록 reduce라는 함수를 만들면 되었다.
function reduce(arr, callback, initialValue) {
let returnValue = initialValue;
for (const num of arr) {
returnValue = callback(returnValue, num);
}
return returnValue;
}
일단 return value를 3번째 인자로 전달받은 initial value로 초기화해준다.
다음으로 배열 원소를 하나하나씩 돌며 return value에 콜백 함수를 적용해준다.
return value는 계속 callback이 적용된 값으로 변하게 된다.
배열을 다 훑으면 return value를 return 한다.
아무튼간에 면접은 보면 볼수록 경험치를 쌓을 수 있어서 유익한 것 같다.
💭 배운 것
- 내장 메소드 등이 실제로 어떻게 구현되어 있는지 한 번쯤 고민해보자.
- 당황하지 말자. (면접 경험이 많을수록, 지식·실력 면에서 준비될수록 당황을 덜 할 수 있을 것 같다.)
- 면접 볼 때는 말할까 말까 할 때 말하자.
반응형
'프로그래밍 > JavaScript' 카테고리의 다른 글
[JS] 파일과 데이터를 모두 body에 넣어 API 요청하기 | form 태그 활용기 (2) (0) | 2022.08.30 |
---|---|
[JS] switch case 문과 비교 연산자(==, ===) (0) | 2022.08.04 |
[JS, Phaser 3] 자바스크립트로 게임 개발하기 | 뱀파이어 서바이벌 클론코딩 (2) | 2022.06.07 |
[JS] 객체 프로퍼티 접근법과 식별자 네이밍 규칙 (0) | 2022.04.26 |
[JS] 이벤트 객체의 target, currentTarget 차이 (0) | 2022.04.19 |