주어진 배열에서 양수의 개수를 구하고자 할 때 reduce를 이용하여 아래와 같이 양수의 누적값을 카운트할 수 있다.

[-1,2,3].reduce((a,c) => a + c>0 ? 1 : 0, 0);

reduce() 함수의 결과값을 잠시 예측해보자.











혹시 결과값이 2라고 예측하신 분만 계속 보세요..




양수의 개수는 2가 맞지만
위 코드의 실행결과는 1이 된다.


왜 일까?

문제는 a + c>0 ? 1 : 0 표현에 있다. a 변수에 삼항연산자의 값을 더하고자 했던 표현이지만, 실제 연산은 (a + c)>0 ? 1 : 0 와 같이 수행이 되기 때문이다


결론은

삼항연산자를 사용할 땐 꼭 괄호로 묶어주는 습관을 갖자

a + (c>0 ? 1 : 0)