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

2021. 6. 29. 11:37JS/알고리즘

자바 알고리즘 scripting을 공부하다 처음 보는 reduce()를 보고 나서, MDN에 자세히 나와있는 설명을 읽고 예제를 실행해서 공부해 봅니다.

처음은 간단한 예제 sum 예제 입니다. 일단 reduce에서 받는 매개변수 accumulator와 currentValue의 특징은 initialValue의 값이 있느냐 없느냐의 차이였고. accumulator는 무조건 initialValue와 값이 같고 currentValue는 initialValue값이 있다면 0부터 시작하고 없다면 1부터 시작합니다. 

 

그런 고로 위에 작동 방법을 알아보니... 

initialValue의 값이 0이므로 accumlator는 0부터 시작 currentValue도 0부터 시작 

1. accumlator 값 0 currentValue 값은 0 

2 .accumlator 값 0 currentValue 값은 1 

3. accumlator 값 1 currentValue 값은 2 

4. accumlator 값 3 currentValue 값은 3 

5. return 6 이 된다. 

최종적인 값들이 계산 될때마다 accumlator에 할당되는 구조이네요. 

객체 배열의 값 합계 예제 입니다. 

initialValue의 값이 0이므로 accumlator는 0부터 시작 currentValue도 0부터 시작 하는데. .x의 값을 가져와 더 합니다.

1. accumlator 값 0 currentValue 값은 1

2 .accumlator 값 1 currentValue 값은 4 

3. accumlator 값 5 currentValue 값은 3 

4. return 8 이 된다.  

배열의 평면화 입니다.  arrow 작성된 예제입니다. 그래서 initialValue의 값이 실행할 수식 바로 옆에 [] 이렇게 쓰여졌습니다. 

initialValue의 값이 []이므로 accumlator는 []부터 시작 currentValue도 0부터 시작 

1. accumlator 값 [] currentValue 값은 [0,1] concat을 이용하여 값을 accumulator에 넣어(?) 줍니다. 

2 .accumlator 값 [0,1] currentValue 값은 [2,3] concat을 이용하여 값을 accumulator에 넣어(?) 줍니다. concat은 mdn에 값을 이어준다고 했으므로 원래 있던 배열 뒤에 추가시켜 주네요. [0,1,2,3] 이 됩니다. 

3. accumlator 값 [0,1,2,3] currentValue 값은 [4,5] concat을 이용하여 acuumulator에 값을 넣어(?) 주면.. 

4. return [0,1,2,3,4,5] 이 됩니다.

 

객체에서 인스턴스 값 계산 입니다. 

initialValue의 값이 {}이므로 allNames는 {}부터 시작 name도 0부터 시작 

1.  allNames 값 {} name 값은 'Alice' if를 만나지만 아직 name이 allNames 안에 없으므로 else로 간다. 그래서 allNames[name] = 1을 하여 {'Alice' :1} 이 된다. 

2 . allNamesr 값 {'Alice' :1} name 값은 'Bob' if를 만나지만 아직 name이 allNames 안에 없으므로 else로 간다. 그래서 allNames[name] = 1 을 하여 {'Alice' :1,'Bob':1} 이 된다.

3.  allNames 값{'Alice' :1,'Bob':1} name 값은 'Tiff' if를 만나지만 아직 name이 allNames 안에 없으므로 else로 간다. 그래서 allNames[name] = 1을 하여 {'Alice' :1,'Bob':1,'Tiff':1} 이 된다.

4.  allNames 값{'Alice' :1,'Bob':1,'Tiff':1}name 값은 'Bruce' if를 만나지만 아직 name이 allNames 안에 없으므로 else로 간다. 그래서 allNames[name] = 1 을 하여 {'Alice' :1,'Bob':1,'Tiff':1,'Bruce:1} 이 된다.

5. allNames 값{'Alice' :1,'Bob':1,'Tiff':1,'Bruce:1} name 값은 'Alice' if를 만나 name이 allNames 안에 있으므로 

allNames[name] ++ 하여 Alice를 증가시킨다. 

6. return{'Alice' :2, 'Bob':1, 'Tiff':1, 'Bruce:1}  이 된다.