개발/Javascript

[Javascript] 배열 누적값 만들기/ Object 누적값 만들기

Jindory 2022. 3. 18. 07:46

안녕하세요. 개발자 Jindory입니다.

오늘은 Javascript의 배열값의 누적 값을 만드는 방법에 대해서 글을 작성해보려고 합니다.

 

자바스크립트에서는 배열의 누적 합계를 간편하게 구할 수 있도록 내장 메서드인 reduce()를 제공합니다.

콜백 함수를 이용해 원하는 계산식, 또는 원하는 로직을 추가로 적용할 수 있기 때문에 누적 합(또는 다른 누적 결과)을 얻을 수 있습니다.


배열 누적합 구하기

누적 합을 구하는 메서드는 reduce()를 사용합니다.

reduce 파라미터와 사용법은 아래와 같습니다.

Array.reduce(누적용변수, 현재요소변수, 현재인덱스(생략가능), 원본배열(생략가능))=>{
	return 누적 반환값(누적계산식);
}, 누적결과용변수초기값);

예시)

let num = [1,2,3,4,5,6,7,8,9,10];
let result = 0;
result = num.reduce((cum,n)=>{
    return cum+n
});

// result = 55

만일 누적되는 값을 확인하고 싶다면 reduce의 콜백 함수에 누적되는 값을 추가하면 됩니다.

let num = [1,2,3,4,5,6,7,8,9,10];
let acum = [];
let result = 0;
result = num.reduce((cum,n)=>{
    acum.push(cum+n)
    return cum+n
});
// result : 55
// acum : [3, 6, 10, 15, 21, 28, 36, 45, 55] (9)

위에서 보시다시피 누적값은 누적 값+각 배열의 요소이므로 원래 배열의 개수보다 한번 적게 순회함을 알 수 있습니다.

따라서 초기값부터 누적되는 값을 원하는 사람들은 초기값을 먼저 acum에 추가하고 누적 값을 차례로 추가하면 될 것 같습니다.

reduce() 메서드를 사용하지 않고 forEach() 메서드를 통해서 합계를 간편하게 구할 수도 있습니다.

let num = [1,2,3,4,5,6,7,8,9,10];
let sum = 0;
num.forEach(function(item){sum+=item;});
console.log(sum);
// sum : 55

오브젝트 배열 누적합 구하기

오프젝트에서 배열 누적합을 구하는것도 배열의 누적합을 만드는것과 동일합니다.

먼저 아래와 같이 Object 배열을 만들어 줍니다.

let objArr = [];
for(let index=1;index<=10;index++){
    let obj ={
    num : index,
    odd : 1+index*2,
    even : 0+index*2,
    };
    objArr.push(obj);
}

먼저 각각의 object에 있는 값을 배열로 만들어 주고, 누적값이 저장될 변수에 각 object의 첫번째값을 초기화 합니다.

// 각 Object의 값들을 배열로 만든다.
let numArr = objArr.map(d=>d.num);
let oddArr = objArr.map(d=>d.odd);
let evenArr = objArr.map(d=>d.even);

// 각 배열의 초기값을 배열 누적 배열의 초기값으로 설정
// (왜냐면 누적값을 구할때 배열의 크기보다 하나 작으므로)
let nAcum = [numArr[0]];
let oAcum = [oddArr[0]];
let eAcum = [evenArr[0]];

// 각 배열의 누적 값을 누적 배열에 추가합니다.
numArr.reduce((cum,item)=>{
   nAcum.push(cum+item) 
   return cum+item
});
oddArr.reduce((cum,item)=>{
   oAcum.push(cum+item) 
   return cum+item
});
evenArr.reduce((cum,item)=>{
   eAcum.push(cum+item) 
   return cum+item
});

마지막으로 구한 누적값을 다시 object에 추가합니다.

// objArr에 각 배열의 누적값을 추가한다.
for(let index=0;index<=objArr.length;index++){
    objArr[index].numAcum = nAcum[index];
    objArr[index].oddAcum = oAcum[index];
    objArr[index].evenAcum = eAcum[index];
}


이렇게 배열의 누적합과 오브젝트의 누적합을 구하는 방법에 대해서 배워봤습니다.

 

혹시라도 정정할 내용이나 추가적으로 필요하신 정보가 있다면 댓글 남겨주시면 감사하겠습니다.

오늘도 Jindory 블로그에 방문해주셔서 감사합니다.