배열이 있을 때 최소값, 최대값 구하기 (feat. apply())

Janny·2023년 9월 6일
0

헷갈리는 개념 정리

목록 보기
17/17

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이 나온다.
큰 배열(~10710^7) 정도 되면 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
이렇게 있다고 보면 될 것 같다.

오늘도 새로운 메서드 학습 완료..!

profile
🐣병아리 개발자의 기록을 위한 공간

0개의 댓글