Javascript/배열

Javascript 배열 내장함수(reduce) 숫자와 문자 다루기

appmaster 2021. 2. 1. 00:03

1. 배열의 총 합 구하기 (숫자)

0은 초기 accumulator가 됩니다. accumulator는 누적된 값을 의미합니다.

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

const sum = numbers.reduce((accumulator, current)=> accumulator+current , 0);
console.log(sum);
//출력값
15

소스코드 해석:

accumulator은 초기값이 0 으로시작하고 current는 배열의 그 다음값을 의미합니다.

그래서 0+1은 1이되고, accumulator값은 1이 됩니다.

다음 accumulator은 1이되고, current는 2가 되어서 1+2 =3 이됩니다.

다음 accumulator은 3이되고, current는 3이 되어서 3+3 =6 이됩니다.

다음 accumulator은 6이되고, current는 4가 되어서 6+4 =10 이됩니다.

다음 accumulator은 10이되고, current는 5가 되어서 10+5 = 15 가 됩니다.

 

 

 

 

2. 배열의 평균값 구하기 (숫자)

index은 각 원소의 index값을 알려줍니다. 그래서 사용된 index값은 0 ,1, 2, 3, 4 까지만 있는겁니다.

array은 배열전체 자신을 말해줍니다. 즉 array는 numbers인 겁니다. 

index의 값 최대는 4이기 때문에 array.length-1을 해줍니다.

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

const sum = numbers.reduce((accumulator, current, index, array) => {
    if (index === array.length - 1) {
        return (accumulator + current) / array.length;
    }
    return accumulator + current;
}, 0);
console.log(sum);
//출력값
3

소스코드 해석:

accumulator은 초기값이 0 으로시작하고 current는 배열의 그 다음값을 의미합니다.

if문은 index값이 4일때만 작동하기 때문에,

return accumulator + currnet만 작동해서 값이 순차적으로 더해집니다.

if문으로 들어갔을때

accumulator은 10이되고, current는 5가 되고 array.length는 5이기 때문에 (10+5)/5 =3 이 됩니다.

 

 

 

 

3. 문자의 개수 각각 구하기 (문자)

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

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

    return acc;
}, {})

console.log(counts);
//출력값
{ a: 3, b: 2, c: 2, d: 1, e: 1 }

acc[current] 는 acc['a'] 와 같은 뜻이고 acc.a 와 같은 뜻이됩니다. 즉, acc[current]는 a원소가 되는겁니다. 이렇게해서 각각 원소 값을 비교할 수 있게 됩니다.

 

 

 

 

엑스트라 문제풀이

10보다큰수의 갯수를 구해주세요.

function countBiggerThanTen(numbers){
    return numbers.reduce((acc, current)=>{
        if(current>10){
            return acc + 1;
        }else{
            return acc;
        }
    },0)
}

const count = countBiggerThanTen([1,2,3,4,5,10,20,30,40,50,60]);
console.log(count);