프로그래밍/JavaScript

[JS] Array 내장 메소드 reduce를 직접 구현해보자

choar 2022. 6. 12. 21:11
반응형

[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 한다.

아무튼간에 면접은 보면 볼수록 경험치를 쌓을 수 있어서 유익한 것 같다.

 

💭 배운 것

- 내장 메소드 등이 실제로 어떻게 구현되어 있는지 한 번쯤 고민해보자.

- 당황하지 말자. (면접 경험이 많을수록, 지식·실력 면에서 준비될수록 당황을 덜 할 수 있을 것 같다.)

- 면접 볼 때는 말할까 말까 할 때 말하자.

반응형