구문

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

 

파라미터

callback function

- 다음 4가지의 인수를 가진다.

accumulator  (=acc) accumulator는 callback함수의 반환값을 누적
currentValue (=cur) 배열의 현재 요소
index(Optional) 배열의 현재 요소의 인덱스
array(Optional) 호출한 배열

 

- callback함수의 반환 값은 accumulator에 할당되고 순회중 계속 누적되어 최종적으로 하나의 값을 반환

 

nitialValue(Optional)

최초 callback함수 실행 시 accumulator 인수에 제공되는 값, 

초기값을 제공하지 않을경우 배열의 첫 번째 요소를 사용하고, 빈 배열에서 초기값이 없을 경우 에러가 발생

 

반환 값

배열을 순서대로 불러 각 요소에 대해 callback 함수을 실행한 결과를 누적한 값

 


 

✏️ 예제

 

👀  배열 값 전부 더하기

let arr = [55, 12, 65, 36];
const sum = arr.reduce((acc, cur) => acc + cur);

console.log(sum); //168
let arr = [55, 12, 65, 36];

function reduceFunc(acc, cur){
	return acc + cur;
}

const sum = arr.reduce(reduceFunc);
console.log(sum); // 168

 

👀  원하는 값만 더하기 

const users =  //배열 객체 생성
[ 
  {
    name: 'Anna',
    age: 25,
    job: 'student',
  },
  {
    name: 'Ori',
    age: 38,
    job: 'doctor',
  },
  {
    name: 'June',
    age: 33,
    job: 'ceo',
  }
];


const sum = users.reduce((acc, cur) => {
	acc + cur.age //현재 값에 age 만 가져오기
}, 0); // 초기값 필수!

console.log(sum); //96

 

👀 배열 비교하기

두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 
더 큰 쪽이 크고, 같다면 같습니다.

두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 
arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.
arr1 arr2 result
[49, 13] [70, 11, 2] -1
[100, 17, 84, 1] [55, 12, 65, 36] 1
[1, 2, 3, 4, 5] [3, 3, 3, 3, 3] 0

 

function solution(arr1, arr2) {
    const length1 = arr1.length;
    const length2 = arr2.length;
    if(length1 !== length2) return length1 > length2 ? 1 : -1 
    //삼항연산자
    //arr1.length와 arr2.length 길이가 다를 때 arr1.length 길면 1 반환 arr2.length 길면 -1 반환

    const sum1 = arr1.reduce((acc, cur) => acc+cur, 0) 
    const sum2 = arr2.reduce((acc, cur) => acc+cur, 0)
    //arr1, arr2 배열의 요소를 모두 합친 값을 각 변수에 저장
    if(sum1 === sum2) return 0 //각 배열의 합친 값이 같을 떄 0 반환
    return sum1 > sum2 ? 1: -1 //합친 값이 arr1이 더 클 경우 1 반환 아닐경우  -1 반환
}

 

+ Recent posts