본문 바로가기
코딩테스트 연습/Javascript

[프로그래머스] 평균 구하기, reduce() 메소드

by 홍차23 2020. 7. 28.

문제설명>

정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.

 

제한사항

  • arr은 길이 1 이상, 100 이하인 배열입니다.
  • arr의 원소는 -10,000 이상 10,000 이하인 정수입니다.

코드>

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

리뷰>

function average(array) {
    return array.reduce((a,b) => a+b) / array.length;
}

 

reduce() 메소드는 배열의 각 요소에 대해 주어진 reducer 함수를 실행하고, 하나의 결과값을 반환한다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

 

Array.prototype.reduce()

reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.

developer.mozilla.org

#배열의 모든 값 합산

var sum = [0,1,2,3]

sum.reduce((a,b)=>a+b)

// 6

 

#중첩 배열 펼치기

var flattened = [[0,1],[2,3],[4,5]]
.reduce((a,b)=>a.concat(b), [])

// [0,1,2,3,4,5]

 

#객체 내의 값 인스턴스 개수 세기

var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; 

var countedNames = names.reduce(function(allNames, name) {
    if(name in a){
        allNames[name]++;

    }

    else {

        allNames[name] = 1;

    }

    return allNames;
}, {} );

// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }

 

#속성으로 객체 분류하기

var people = [
  { name: 'Alice', age: 21 },
  { name: 'Max', age: 20 },
  { name: 'Jane', age: 20 }
];

function groupBy(objectArray, property) {
	return objectArray.reduce(function (acc, obj) {
    	var key = obj[property];
        if(!acc[key]) {
        	acc[key] = [];
        }
        acc[key].push(obj);
        return acc;
    }, {} );
}

var groupedPeople = groupBy(people, 'age');

// groupedPeople is:
// { 
//   20: [
//     { name: 'Max', age: 20 }, 
//     { name: 'Jane', age: 20 }
//   ], 
//   21: [{ name: 'Alice', age: 21 }] 
// }

 

#확장연산자와 초기값을 사용하여 객체로 이루어진 배열에 담긴 배열 연결하기

#배열의 중복 항목 제거

#프로미스를 순차적으로 실행하기

#함수 구성을 위한 파이프 함수

#reduce()로 map() 작성

 

댓글