codecamp 문제 하위 배열중 가장 큰 값 반환 하는 알고리즘 풀이(apply,bind,Math.max)

2021. 7. 3. 21:46JS/알고리즘

 

이 알고리즘에서 헷갈리는 Function.apply.bind()의 작동 과정.. 계속 보면 괜찮아지겠죠.. 위의 코드를 내가 이해한 대로 적어보면..

arr이의 배열을 map으로 새로운 배열을 만들어 return 할 것 

배열의 형태를 인수로 받아 작업하기 위해 apply를 이용한다. 함수를 만들기 위해 bind를 사용. 

1. [17,23,25,12] Math.max의 값으로 들어가 25가 되고 

2. [25,7,34,48] Math.max의 값으로 들어가 48이  되고 

3. [4,-10,18,21] Math.max의 값으로 들어가 21이 되고 

4. [-72,-3,-17,-10] Math.max의 값으로 들어가 -3 이 되고

최종 적으로 배열에는 [25,48,21,-3] 이 되거 return 된다. 

 

*해설에서는 Function.prototype.apply.bind(Math.max,null)는 arr.map 값, 즉 내부 arr를 수용하는 새로운 함수를 만듭니다.라고 적혀 있습니다. 

 

*stackoverflow 에서 답변을 보면 arr.map(s => Math.max(...s)); 이 쪽이 훨씬 명확하게 수행한다는 답변이 있습니다.

https://stackoverflow.com/questions/46310766/someone-please-explain-the-function-apply-bindmath-max-null-algorithm

 

*apply는 인수로 배열을 호출할 수 있다. (call 과의 차이점) 

 apply를 사용해서 Math.max를 하면 Math.max(arr[0], arr[1], arr[2], arr[3])이렇게 매개 변수로 전달이 된다.

*bind는 새로운 함수의 복사본을 만들고 반환한다.

*max 는  항상 Math.max() 

 1) 항상 매개 변수는 숫자이어야 한다.

 2) array 을 매개 변수로 하면 NaN 값이 반환된다. 

 3) array를 매개 변수로 하려면 apply나 (...array) 방법을 사용해야 한다.

 4) apply는 context가 필요하지만 Math.max는 context가 필요하지 않기 때문에 null을 입력 Math.max는 null을 무시한   다. ex) Math.max.apply(null,[5,4,6]) // 6

 5) Math.max.apply() 의 작동방법에 관한 stackoverflow 답변 

https://stackoverflow.com/questions/21255138/how-does-the-math-max-apply-work