Javascript - 배열 내장함수 reduce

YuJin Lee·2020년 10월 6일
0

Javascript

목록 보기
10/22
  • reduce
    배열 안에 있는 모든 값들을 사용하여 어떤 값을 연산해야 할 때 사용한다.

forEach로 배열의 값을 모두 더한다면 다음과 같다.

const numbers = [1, 2, 3, 4, 5];

let sum = 0;
numbers.forEach(n => {
  sum += n
});

console.log(sum);
// 15

reduce를 사용하면 다음과 같이 나타낼 수 있다.

const numbers = [1, 2, 3, 4, 5];

const sum = numbers.reduce((accumulator, current) => accumulator + current, 0);
// acculator은 누적 값.
// 함수 뒤의 숫자가 acculator의 초기 값
// current는 배열의 각 원소들
// 함수의 문장이 실행되고 나면 그 결과 값이 acculator가 된다.

console.log(sum);
// 15

배열의 원소 값의 평균을 구하려면 다음과 같이 나타낼 수 있다.

const numbers = [1, 2, 3, 4, 5];

const avg = numbers.reduce((accumulator, current, index, array) => {
  // index는 현재 원소의 순서
  // array는 배열 자체
  
  if (index === array.length - 1) {
    // 원소의 순서가 배열의 길이(5)에서 1을 뺀 4가 됐을 때
    // 원소의 수만큼 반복했을 때
    
    return (accumulator + current) / array.length;
    // 누적값 + 현재 원소 값 / 배열 갯수
  }
  return accumulator + current;
}, 0);

console.log(avg);
// 3

아래와 같이 문자열 배열에서도 사용할 수 있다.
(사실 이 부분은 이해가 잘 안된다...)

const alphabets = ['a', 'a', 'a', 'b', 'c', 'c', 'd', 'e'];

const counts = alphabets.reduce((acc, current) => {
  if (acc[current]) {
    acc[current] += 1;
  } else {
    acc[current] = 1;
  }
  return acc;
}, {});

console.log(counts);
// Object {a: 3, b: 1, c: 2, d: 1, e: 1}
// a: 3
// b: 1
// c: 2
// d: 1
// e: 1
profile
배운 것을 기록하는 곳 💻🙂

0개의 댓글