Back to the Basics

[JS/Node]-Method-ㅡMath.max() 알아보기 본문

Programming Languages/JavaScript & Node.js

[JS/Node]-Method-ㅡMath.max() 알아보기

9Jaeng 2021. 8. 26. 22:07
728x90

HA를 위해 이전에 풀었던 코플릿을 쭈욱~ 돌아보는 중에 풀었던 문제들 중 객체의 값들로 num 타입의 숫자들이 있는데, 이것들의 최댓값을 Object.values를 뽑아서 Math.max()로 뽑았던 것을 보았다. 혹시 배열로 따로 속성들을 뽑지 않고 최댓값을 구할 수 있는 방법이 있을까 순간 궁금해져서 HA를 공부해야 하는 이 바쁜 와중에 Math.max MDN을 들어가게 되었다. (시간이 걸리는 일은 아니니까)

MDN을 보다보니 Math.max에 대해 몰랐던 사실과 기억하고 있어야 할 사항, 그리고 Math.max 대체 방법들이 나와있었다. 아, 이건 정리하여 기록을 해야겠다! 싶어서 이렇게 글을 또 쓴다. ( 빨리 나머지 코플릿 문제들 봐야 하는데,,,)

Math.max MDN

  • Math.max()는 네임에서도 예상할 수 있듯이 인자로 들어온 값을 중 최댓값을 return 해주는 함수이다. input value 가 num type이 아니면 NanN을 리턴한다. 그리고 inpt이 없으면 -infinity이 출력된다.
  • Math.max()의 사용법은 매우 간단하다.
// 인자가 숫자형인 경우
Math.max(10,21,12,6,4,90,25); // 90

// 인자가 배열인 경우 spread operator 를 사용할 수 있다
const arr=[1,3,2,3,8]
Math.max(...arr) // 8
Math.max.apply(null,arr)

난 그동안 배열의 경우 spread operator를 사용하여 Math.max()를 사용하였다.
그런데 MDN을 읽어보니 (짧아서 금방 읽었다) 만약 input이 매우 많으면 spread 또는 apply를 사용하면 fail 또는 잘못된 결과를 return 한다고 한다. 지금은 짧은 문자 또는 숫자만 다루지만, 나중에 다량의 데이터를 다루게 된다면 분명 문제가 될 것이다.

MDN에 따르면, 이런 문제에서 reduce를 사용하면 위와 같은 결과를 낳지 않는다고 한다.
reduce를 사용한 방법은 아래와 같다.

const getMax=(arr)=>{        
    return arr.reduce((acc,cur)=>Math.max(acc,cur),0)
}

var arr = [1,2,3];
getMax(arr) 
// 3

데이터가 많을 경우 (얼마나 많아야 하는지는 모르겠지만) 위의 방법을 참고해서 함수로 만들어서 사용하면 편할듯하다.

728x90
Comments