LHJ

I'm a FE developer.

14-7. Array 오브젝트(ES5 기준) / 반환 값을 파라미터 값으로 사용

05 Dec 2020 » js_beginner

14-7. Array 오브젝트(ES5 기준) / 반환 값을 파라미터 값으로 사용

reduce()

구분데이터(값)
data반복 대상
파라미터첫번째 파라미터: 콜백 함수
두번째 파라미터: 초깃값opt
반환콜백 함수에서 반환한 값

  • forEach()처럼 시맨틱 접근
  • 배열 끝까지 콜백함수 호출

    • 파라미터 작성 여부에 따라 처리가 다름

reduce() 파라미터 한개만 작성한 경우

  • 콜백 함수만 작성한 경우

    • 즉, 파라미터를 하나만 작성

  • 처음 콜백 함수를 호출할 때

    • 인덱스 [0]의 값을 prev 값에 설정
    • 인덱스 [1]의 값을 current 값에 설정
    • 인덱스에 1을 설정

  • 두번째로 콜백 함수를 호출할 때

    • 콜백 함수에서 반환된 값을 직전 값에 설정
    • 인덱스 [2]의 값을 current 값에 설정

var value = [1, 3, 5, 7];
var fn = function (prev, current, index, array) {
    console.log(prev + "," + current);
    return prev + current;
}
var result = value.reduce(fn);
console.log("결과:", result);
// 1,3
// 4,5
// 9,7
// 결과: 16
  1. 4번이 아니라 3번 반복한 것은 처음 시작할 때 index가 1이기 때문입니다.

reduce() 파라미터 두번째까지 작성한 경우

  • 두번째 파라미터를 작성한 경우
  • 처음 콜백 함수를 호출할 때

    • 두번째 파라미터 값을 prev 값에 설정
    • 인덱스 [0]의 값을 current 값에 설정
    • 인덱스에 0을 설정

  • 두번째로 콜백 함수를 호출할 때

    • 콜백함수에서 반환된 값을 prev 값에 설정
    • 인덱스 [1]의 값을 current 값에 설정

var value = [1, 3, 5];
var fn = function (prev, current, index, array) {
    console.log(prev + "," + current);
    return prev + current;
}
var result = value.reduce(fn, 7);
console.log("반환:", result);
// 7,1
// 8,3
// 11,5
// 반환: 16
  1. 두번째 파라미터에 초깃값으로 7을 작성
  2. 처음 콜백 함수를 호출할 때 두번째 파라미터 값 7을 prev에 설정
    prev: 7, current: 1, index: 0, 반환값: 8
  3. 두번째 콜백함수를 호출할 때
    prev: 8, current: 3, index: 1, 반환값: 11

reduceRight()

구분데이터(값)
data반복 대상
파라미터첫번째 파라미터: 콜백 함수
두번째 파라미터: 초깃값opt
반환콜백 함수에서 반환한 값

  • reduce()와 처리방법 같음
  • 배열 끝에서 앞으로 하나씩 읽어가면서

    • 콜백 함수에서 반환한 값을 반환

        var value = [1, 3, 5, 7];
        var fn = function (prev, current, index, array) {
            console.log(prev + "," + current);
            return prev + current;
        }
        var result = value.reduceRight(fn);
        console.log("반환:", result);
        // 7,5
        // 12,3
        // 15,1
        // 반환: 16