JavaScript에서 배열에 담긴 값들 중 가장 작은 숫자, 즉 최소값을 구해야 하는 경우가 자주 있습니다. 이때 Math.min() 함수와 sort() 메서드를 활용하면 간단하게 해결할 수 있습니다. 아래에서 두 가지 방법을 예제 코드와 함께 살펴보겠습니다.
1) Math.min() 함수 사용하기
Math.min() 함수는 인수로 전달된 값들을 하나하나 검사하여 그중 가장 작은 값을 반환합니다. 배열 전체를 한 번에 처리하려면 apply() 메서드를 함께 사용하는 것이 일반적입니다.
아래 예제를 통해 동작 방식을 확인해 보겠습니다.
예제 코드
<html>
<body>
<script>
function minimum(value) {
if (toString.call(value) !== "[object Array]")
return false;
return Math.min.apply(null, value);
}
document.write(minimum([6,39,55,1,44]));
</script>
</body>
</html>
실행 결과
1
위 코드에서는 먼저 전달된 인수가 실제 배열인지 검사한 후, Math.min.apply(null, value)를 통해 배열의 모든 요소를 개별 인수처럼 넘겨줍니다. 그 결과 배열 [6, 39, 55, 1, 44] 중 가장 작은 값인 1이 출력됩니다.
참고로 ES6(ES2015) 이상 환경이라면 스프레드 연산자를 사용해 더욱 간결하게 표현할 수도 있습니다.
const min = Math.min(...[6, 39, 55, 1, 44]); // 결과: 1
2) sort() 메서드 사용하기
sort() 메서드에 비교 함수를 함께 사용하면 배열의 요소를 오름차순 또는 내림차순으로 정렬할 수 있습니다. 정렬이 완료된 배열에서 length 속성을 이용하면 다음과 같이 최소값을 손쉽게 찾을 수 있습니다.
예제 코드
<html>
<body>
<input type ="button" onclick="myFunction()" value = "clickme">
<p id="min"></p>
<script>
var numbers = [6,39,55,1,44];
document.getElementById("min").innerHTML = numbers;
function myFunction() {
numbers.sort(function(a, b){return b - a});
document.getElementById("min").innerHTML = numbers;
document.write(numbers[numbers.length-1]);
}
</script>
</body>
</html>
실행 결과
프로그램을 실행한 뒤 화면의 'clickme' 버튼을 클릭하면, 비교 함수 function(a, b){return b - a}에 의해 배열이 내림차순으로 정렬됩니다. 이후 numbers[numbers.length-1]로 배열의 마지막 요소, 즉 가장 작은 값을 가져와 출력합니다.
1
마무리
정리하면 다음과 같습니다.
- Math.min.apply(null, 배열): 배열의 모든 요소를 검사해 즉시 최소값을 반환하며, 성능 면에서도 유리합니다.
- sort() + length 속성: 배열을 정렬한 뒤 마지막(또는 첫 번째) 요소를 꺼내는 방식으로, 원본 배열의 순서가 변경된다는 점에 유의해야 합니다.
단순히 최소값만 필요하다면 Math.min() 방식을, 정렬된 배열 자체가 필요한 상황이라면 sort() 방식을 선택하는 것이 좋습니다.