const result = {}
const arr = ["apple","apple","banana","melon","melon"]
arr.forEach(f => {
result[f] = (result[f] || 0) + 1
})
실행 결과 다음과 같은 JSON 형태의 자료를 얻을 수 있다.
{apple : 2, banana : 1, melon : 2}
위 실행 코드중 다음 구문을 살펴보자
result[f] = (result[f] || 0) + 1
JS에서 forEach는 마치 for..in
구문처럼 각 요소를 순회하며 코드를 실행한다. 위 구문에서 'f' 는 개발자가 임의로 정해놓은 index 명이다. 즉, f에는 차례대로 apple
, apple
,banana
... 의 값이 들어가며 순회한다.
result[f]
는 에서의 [] 사용은 배열에 대한 접근이 아닌 JSON 형태 자료의 key에대한 value에 접근하겠다는 의미이다. 1번째 해설에서 apple
, apple
,banana
과 같이 순회하므로 result[apple]
임을 알 수 있다.
JS 에서 (구문1 || 구문2)
이 뜻하는 바는, 만약 구문1이 존재하지 않는다면 (null
혹은 undefined
) 구문2를 return 받겠다는 뜻이다. 구문1이 존재한다면 구문1을 return 받겠다는 뜻도 포함한다.
즉, result[f] = (result[f] || 0) + 1
의 의미는
result[f]
가 존재할 경우 - result[f] = result[f] + 1
result[f]
가 존재하지 않을 경우 - result[f] = 0 + 1