[JS] reduce 함수 구현하기

은비·2023년 10월 10일
2
post-thumbnail

Array.prototype.reduce와 비슷한 동작을 하는 함수를 구현해 보려고 한다.

const reduce = (arr, callback, initValue) => {
  let result = initValue === undefined ? arr[0] : initValue;

  for (let i = initValue === undefined ? 1 : 0; i < arr.length; i += 1) {
    result = callback(result, arr[i]);
  }
  return result;
};

console.log(reduce([1, 2, 3], (a, b) => a + b, 0)); // 6
console.log(reduce([1, 2, 3, 4, 5], (a, b) => a + b)); // 15
console.log(reduce([1, 2, 3, 4, 5], (a, b) => a * b, 1)); // 120
console.log(reduce([2, 2, 2], (a, b) => a * b)); // 8
console.log(reduce([3, 3, 3], (a, b) => a * b, 0)); // 0

📌 함수 설명

  1. reduce 함수는 매개변수로 arr(배열), callback(고차함수), initValue(초기값)을 받는다.
  2. result 변수를 하나 만들어 준 후 initValue(초기값)이 없을경우 (undefined포함) arr의 0번째 인덱스를 주고 initValue이 있을경우 initValue을 할당해준다.
  3. for 루프를 사용하여 i의 초기값을 initValue 값에 따라 0과 1을 주고 arr의 길이 만큼 하나씩 더해주며 루프를 돈다.
  4. result변수에 callback 함수를 호출하여 매개변수로 result와 arr[i]를 준다.
  5. for 루프가 종료된 후 result를 return하여 Array.prototype.reduce와 비슷한 함수를 구현해보았다.

0개의 댓글