MDN에 나와 있는 reduce() 예제 작동 방법 공부하기 .. (2)

2021. 6. 29. 20:10JS/알고리즘

속성별 개체 그룹화 

initialValue 값은 {} 이므로 acc의 값은 {}이다. obj는 0부터 시작.

1. key 변수에 obj[property] 즉 obj[age] 값을 넣으므로 21이 된다. if문에서 acc에 acc[key]가 없으니 [](방)을 만든다. 

그리고 acc[key]만든 [] 안에 obj 자리에 있는 값 {name:'Alice', age:21}을 push 한다. 그러면 acc에는 '21'[{name:'Alice', age:21}] 값이 들어 있다.

2. key 변수에 obj[age]값 20을 할당한다. if 문에서 acc에 acc[key]가 없으니 [](방)을 만든다. 그리고 acc[key]만든 [] 안에 obj 자리에 있는 값{name:'max' , age:20}을 push 한다. 그러면 acc에는 { '21'[{name:'Alice', age:21}] '20'[{name:'max' , age:20}]}값이 들어 있다.

3. key 변수에 obj[age] 값 20을 할당하고 if문에서 acc에 acc[key]값이 있으므로 바로 acc[key]값에 obj 값 {name:'Jane',age:20} push 한다. 그러면 acc의 값은 { '21'[{name:'Alice', age:21}] '20'[{name:'max' , age:20},{name:'Jane',age:20}]} 되고 이값을 return 한다. 

분산 연산자와 초기 값을 사용하여 개체 배열에 포함된 array결합

initialValue의 값은 ['Alphabet'] accumulator 초기 값은 ['Alphabet'] 되고 currentValue는 0부터 시작

1. accumulator 값은 ['Alphabet'] 이고 currentValue는 0번째의 { name: 'Anna', books: ['Bible', 'Harry Potter'], age: 21 }값이 들어 있고 .books로 books의 값만 ... 로 books전체 값을 accumulator에 할당 

2. accumulator 값은  ['Alphabet','Bible', 'Harry Potter'] 이고 currentValue는 1번째의 { name: 'Bob', books: ['War and peace', 'Romeo and Juliet'], age: 26 } 값이 들어 있고 .books로 books의 값만 ... 로 books전체 값을 accumulator에 할당 3.  accumulator 값은 ['Alphabet','Bible', 'Harry Potter','War and peace', 'Romeo and Juliet'] 이고 currentValue는 2번째 

{ name: 'Alice', books: ['The Lord of the Rings', 'The Shining'], age: 18 } 값이 들어 있고  .books로 books의 값만 ... 로 books전체 값을 accumulator에 할당 

4. 최종적으로 accumulator의 값은 'Alphabet','Bible', 'Harry Potter','War and peace', 'Romeo and Juliet','The Lord of the Rings', 'The Shining'] 책이름만 모아 놓은 allbooks 배열이 완성 된다.  

array에서 중복 항목 제거

initialValue 의 값은 [] 이며 accumulator의 값은 [] 된다. currentValue는 0부터 시작

1. accumulator는 [] 값이고 currentValue는 0 번째 자리 a 가 된다. if 에서 accumulator에 indexOf를 사용해 currentValue의 값이 있는지 확인하고 없으므로 push 한다. 그래서 accumulator['a']가 들어 간다. 

2. accumulator는 ['a'] 값이고 currentValue는 1 번째 자리 b 가 된다. if 에서 accumulator에 indexOf를 사용해 currentValue의 값이 있는지 확인하고 없으므로 push 한다. 그래서 accumulator['a','b']가 들어 간다. 

3.accumulator는 ['a','b'] 값이고 currentValue는 2 번째 자리 a 가 된다. if 에서 accumulator에 indexOf를 사용해 currentValue의 값이 있는지 확인하고 있으므로 push 하지 않고 넘어 간다. 

그렇게 쭈욱 하다 보면 중복되는 항목은 배열에 할당하지 않고 최종적으로 ['a','b','c','e']가 return 된다. 

initialValue의 값은 input이고  acc의 초기 값은 input의 값이 된다. 여기서 fn은 계산 식을 받는 듯하다. 

1. input 6이 들어오면 acc는 6이 되고 . functions로 double이 2번 들어오면 6+6=12가 되고 그것을 2번 해서 24가 된다.

2. input 6이 들어오면 acc는 6이되고 funcfions로 triple 이 2번 들어오면 6*3=18이 되고 acc에 18이 들어가며 다시 triple를 해야 할 때 3*18이 되기 때문에 54가 된다. 

3. input 6이 들어오면 acc는 6이 되고 funcfions로 double1번 triple 1번이 들어오면 6+6=12 가 되고 acc는 12가 되며 triple을 할 때 3*12가 되어 36이 된다.