Math.max(), Math.min()은
"인자로 들어온 값 중에서 가장 작은 값/ 큰 값을 반환하는 함수"
우선 Math.max() mdn문서를 보면
console.log(Math.max(1, 3, 2));
// Expected output: 3
console.log(Math.max(-1, -3, -2));
// Expected output: -1
const array1 = [1, 3, 2];
console.log(Math.max(...array1));
// Expected output: 3
...
스프레드 연산자를 이용해서 배열의 값을 가져와서 비교할 수 있다.
근데, 또 이번에 프로그래머스 코딩테스트 연습을 하면서
공부하게 된 다른 방법
mdn에서 apply() 문서를 또 가져와 보면,
const numbers = [5, 6, 2, 3, 7];
const max = Math.max.apply(null, numbers);
console.log(max);
// Expected output: 7
const min = Math.min.apply(null, numbers);
console.log(min);
// Expected output: 2
이렇게 쓰인다는 걸 알 수 있다.
apply() 메서드는 주어진 this 값과 배열 (또는 유사 배열 객체) 로 제공되는 arguments 로 함수를 호출합니다.
null 을 첫번째 인자로 사용하면 context는 window 객체가 된다.
위와 같이 사용하면 두번째 인자의 배열의 값을 순서대로 호출한 메서드의 인자로 보내 실행한다.
주의사항
배열 내에서 비교 불가능한 값이 있다면 NaN이 나온다.
큰 배열(~) 정도 되면 RangeError: Maximum call stack size exceeded 가 나온다.
추가로 다른 방식으로 쓰이는 apply를 보면
concat 은 우리가 원하는 동작을 하지만 실제로는 기존 배열에 추가되지 않고 새 배열을 만들어 반환한다. 그러나 우리는 기존 배열에 추가하고 싶다.
var array = ["a", "b"];
var elements = [0, 1, 2];
array.push.apply(array, elements);
console.info(array); // ["a", "b", 0, 1, 2]
이렇게 새 배열을 만드는 concat
기존 배열에 추가하는 apply
이렇게 있다고 보면 될 것 같다.
오늘도 새로운 메서드 학습 완료..!