중복 값 카운트 하는 스크립트에 대한 질문입니다.


(Kimwoosuk) #1

let people = [‘billyBobs’, ‘Ggg’, ‘jung’, ‘billyBobs’, ‘aaaaaaaaaaaaaaaaaaaa1404’, ‘bhavin111’, ‘asda’, ‘sarewqr’, ‘shubhamoiuhg’, ‘testGirish20’, ‘sawqweqwe’, ‘billyBobs’];
let a = {};

people.forEach(key => {
a[key] = a[key] ? a[key] +1 : 1
})
let d = people.reduce((obj, t) => (obj[t] = obj[t] ? obj[t]+1 : 1, obj),{});

두가지 코드인데요.

  1. forEach에서 로직인데요 처음에 a[key] 시작되면 아무것도 없으니 a[‘billyBobs’] key가 되고 1이 value 가 되는데 let a = [] 되고 let a = {} 여도 되더라구요 key,value로 들어오면 {} 오브젝트로 만들어야 할꺼 같은데요 둘다 사용이 가능한건가요
  2. reduece에 false일때 1, obj 의 의미가 어떻게 되는건지 궁금합니다.

(Owen Jeon) #2
  1. 배열은 Object로 부터 확장되었기 때문입니다. 심지어 함수도 될겁니다.

  2. 삼항연산자는 콤마 전에 끝나고, 뒤의 obj는 콜백 함수의 리턴값입니다. 자바스크립트 코드의 처리순서를 활용한 문법입니다.


(Kimwoosuk) #3

2에서 1,obj 가 어떤 형태로 콜백이 되는지 잘 몰라서요 혹시 자세히 설명해 주실수 있을까요