티스토리 뷰

ES6

:reduce에서 array of object의 합 구할때 주의사항 (get sum of array of object)


| 시작하기에 앞서

  • js에서 loop를 돌며 array안에있는 object의 합을 구할때 reduce를 자주 쓰는데 자주 하는 실수가 있다. (나만 한건 아닐거다.. 아마)
  • 어떤 실수인지 아래에서 살펴보자!

| 설명


> 잘못된 코드 (wrong code)

const sum = reviewScores.reduce(function(prev, next) {
return prev.score * prev.count + next.score * next.count;
});


https://stackoverflow.com/questions/5732043/javascript-reduce-on-array-of-objects 참고하면 그 이유를 더 명확히 알수 있는데, 위와 같이 코드를 짜면 축적된 데이터의 값에서 .score , .count와 같은 property를 접근하려 하기때문에 잘못된것이다. 다른 사람들도 이런 실수를 꽤 했나보다 (다행)

const reviewScores = [{score:1,count:5},{score:2,count: 4},...]

예를 들어 위와같은 reviewScores 가 있으면 처음은 잘 실행되겠지만 return 값은 연산 결과인 1*5+2*4=13가 나오므로 특정 숫자값인데 여기서 reduce 함수로 다시 돌면서 13.score 13.count 값에 접근하기 때문에 오류가 난다. 


> 수정한 코드 (good code)

const sum = reviewScores.reduce(function(prev, next) {
return prev + next.score * next.count;
}, 0);


따라서 위와 같이, initialize를 위와 같이 해주면 깔끔하게 문제가 해결된다. return 값이 prev + next.score * next.count 이므로, loop를 돌때 직전값은 (prev) 더하는것에 사용되기만하고, next값의 score count property에만  접근하기 때문이다!

'Programming Skills > es6' 카테고리의 다른 글

ES6 - 윤지수교수님 오프라인 강의  (0) 2018.05.11
es6 - Slice() vs Spilce()  (0) 2018.05.03
es6- class를 통한 객체생성  (0) 2018.05.03
es6 - Arrow function  (0) 2018.04.14
ES6-Destructuring 활용 json 파싱  (0) 2018.03.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함