JavaScript에서 배열의 최소 요소와 최대 요소를 구하려면 Math.min()과 Math.max() 메서드를 사용하면 됩니다. 다만 이 메서드들은 개별 숫자 인수를 받기 때문에, 배열을 그대로 전달할 수 없습니다.
apply()를 활용한 방법
배열의 요소들을 인수로 전달하려면 Function.prototype.apply()를 활용하는 것이 가장 간단한 방법입니다. apply()는 두 번째 인수로 배열을 받아 해당 요소들을 개별 인수처럼 펼쳐서 전달해 주기 때문입니다.
다음 예제 코드를 실행하여 배열에서 최댓값과 최솟값을 찾아보세요.
예제 코드
<html>
<body>
<script>
var arr = [50, 30, 70, 60];
document.write("Maximum Value: " + Math.max.apply(null, arr));
document.write("<br>Minimum Value: " + Math.min.apply(null, arr));
</script>
</body>
</html>실행 결과
Maximum Value: 70 Minimum Value: 30
스프레드 연산자(ES6) 활용하기
ES6 이상 환경이라면 스프레드 연산자(...)를 사용하는 것이 더 간결하고 가독성이 좋습니다.
const arr = [50, 30, 70, 60]; console.log(Math.max(...arr)); // 70 console.log(Math.min(...arr)); // 30
주의 사항
Math.max.apply(null, arr)나 Math.max(...arr) 방식은 배열의 크기가 매우 클 경우(수만 개 이상의 요소) 호출 스택 한도 초과 오류가 발생할 수 있습니다. 이런 경우에는 reduce() 메서드를 사용해 반복적으로 비교하는 것이 안전합니다.
const max = arr.reduce((a, b) => Math.max(a, b)); const min = arr.reduce((a, b) => Math.min(a, b));
정리하면, 일반적인 경우에는 apply() 또는 스프레드 연산자를 사용하고, 대용량 배열에서는 reduce()를 사용하는 것이 좋습니다.