티스토리 뷰
Programming Skills/es6
ES6 - reduce에서 array of object의 합 구할때 주의사항 (get sum of array of object)
Ideveloper2 2018. 9. 6. 17:19ES6
: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 |
댓글