[Today I Learned] 1월 3주차 day5

suwoncityboyyy·2023년 1월 22일
0

reduce

reduce함수는 배열의 각 요소를 순회하며 callback함수의 실행값을 누적하여 하나의 결과값을 반환한다.

arr.reduce((accumulator, currentValue, index, array) => accumulator + currentValue , initialValue)

총 4가지의 인수를 가진다.

  • 첫번째 인자 (accumulator) : 누적되는 값(계산값) , initailvalue를 설정 한 경우 initialValue로 값으로 초기화 된다, 없을 경우 arr의 0번째 인덱스 값으로 초기화 된다.
  • 두번째 인자 (currentValue) : 현재 배열의 값
  • 세번째 인자 (index) : 현재 배열값의 index
  • 네번째 인자 (array) : reduce 함수를 호출한 배열

프로그래머스 Lv.1 평균구하기

for문을 이용해서 두개의 변수 선언 후 합계를 담은 변수를 배열의 길이만큼 나누어서 몫을 반환 한 후 return 한다.

function solution(arr) {
  let sum = 0;
  let avg = 0;
  for (let i = 0; i < arr.length; i++) {
    sum += arr[i];
  }
  return (avg = sum / arr.length);
}

하지만 reduce 메서드를 이용해 보다 축약된 코드로 짤수있다.

function solution(arr) {
  return arr.reduce((acc, next) => acc + next / arr.length, 0); 
}

프로그래머스 Lv.1 내적

for문과 reduce메서드를 두개 다 사용해서 풀었다. 하지만 충분히 코드를 축약할 수 있고 반복문 하나로도 풀 수 있기에 아래 코드를 리팩토링을 해보았다.

for문과 reduce메서드를 동시에 사용해서 비효율적인 코드이다.

function solution(a, b) {
  let newArr = [];
  for (let i = 0; i < a.length; i++) {
    let sum = a[i] * b[i];
    newArr.push(sum);
  }
  return newArr.reduce((acc, next) => acc + next);
}

수정 후 코드

function solution(a, b) {
  let sum = 0;
  for (let i = 0; i < a.length; i++) {
    sum += a[i] * b[i];
  }
  return sum;
}

이번엔 for문으로 말고 좀 더 간결하게 reduce메서드를 활용해서 문제를 풀어봤다.

function solution(a, b) {
  return a.reduce((acc, next, i) => (acc += a[i] * b[i]), 0);
}
profile
주니어 개발자 기술노트

0개의 댓글