HOWTO · JavaScript
JavaScript 배열에서 최대 / 최소 값 찾기
JavaScript에서 Math.min() 및 Math.max() 함수를 사용하여 배열의 최소값과 최대 값을 찾을 수 있습니다.
이 페이지의 내용
JavaScript 배열에서 Math.max() 또는 Math.min()를 사용해 최댓값이나 최솟값을 구할 수 있습니다. apply()로 배열의 값을 인수로 전달하거나, 계산을 직접 제어해야 하거나 배열이 매우 클 때는 반복문을 사용하세요.
Math.max()로 최댓값 구하기
Math.max()는 인수를 비교해 가장 큰 숫자를 반환합니다. 배열이 아니라 각각의 인수를 받으므로 apply()를 사용해 배열의 각 요소를 인수로 전달합니다. 첫 번째 매개변수는 this 값입니다. Math.max()는 이 값을 사용하지 않으므로 여기서는 null을 지정해도 됩니다.
다음 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
const numbers = [1, 5, 6, 2, 3];
console.log(Math.max.apply(null, numbers));
결과는 numbers에서 가장 큰 값입니다. 입력은 숫자로 구성해야 합니다. 요소에 NaN이 있으면 결과도 NaN입니다. 이 방법은 일반적인 배열에 편리하며, 가장 작은 값을 구하려면 같은 방식으로 Math.min()를 사용할 수 있습니다.
Math.min()로 최솟값 구하기
Math.min()는 같은 방식으로 인수를 받아 가장 작은 숫자를 반환합니다. numbers라는 배열이 있다면 Math.min.apply(null, numbers)를 호출하면 됩니다. apply() 호출이 배열의 각 요소를 개별 인수로 전달하므로 값을 하나씩 직접 인수로 적을 필요가 없습니다.
예를 들어, 다음 완전한 프로그램은 작은 배열에 이 방법을 적용합니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
const numbers = [1, 5, 6, 2, 3];
console.log(Math.min.apply(null, numbers));
반환값은 가장 작은 요소입니다. 숫자 데이터에는 Math.max()와 Math.min()를 사용하세요. 두 메서드 모두 배열을 정렬하거나 원본 배열을 변경하지 않습니다. 값이 숫자가 아닐 수도 있다면 최댓값이나 최솟값을 계산하기 전에 변환하거나 유효성을 검사해, 비교 결과가 애플리케이션의 의도에 맞도록 하세요.
apply() 또는 반복문을 대안으로 사용하기
반복문을 사용하면 모든 요소를 함수 인수로 전달하지 않아도 됩니다. 첫 번째 요소로 현재 값을 초기화한 다음 나머지 값을 차례로 비교하세요. 다음 함수는 입력 배열이 비어 있으면 undefined를 반환하고, 그렇지 않으면 해당 배열의 최댓값이나 최솟값을 반환합니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
function maximum(numbers) {
if (numbers.length === 0) return undefined;
let result = numbers[0];
for (let i = 1; i < numbers.length; i++) {
if (numbers[i] > result) result = numbers[i];
}
return result;
}
function minimum(numbers) {
if (numbers.length === 0) return undefined;
let result = numbers[0];
for (let i = 1; i < numbers.length; i++) {
if (numbers[i] < result) result = numbers[i];
}
return result;
}
const numbers = [1, 5, 6, 2, 3];
console.log(maximum(numbers));
console.log(minimum(numbers));
실제 요소에서 계산을 시작하면 모든 값이 음수이거나 양수뿐인 배열에서도 올바른 결과를 얻을 수 있습니다. 지역 변수인 result를 사용하므로 계산 과정에서 전역 변수를 만들거나 변경하지 않습니다. 이 반복문은 요소가 숫자라고 가정하므로, 숫자와 다른 값이 섞였거나 값이 누락될 수 있다면 비교 전에 유효성을 검사하세요.
빈 배열과 큰 배열 처리하기
인수 없이 Math.max()를 호출하면 -Infinity를 반환하고, 인수 없이 Math.min()를 호출하면 Infinity를 반환합니다. 빈 배열에 둘 중 하나를 적용하면 인수가 전달되지 않으므로 Math.max.apply(null, [])와 Math.min.apply(null, [])도 각각 같은 값을 반환합니다. 이 값이 애플리케이션에 적절한지 판단하거나, 먼저 numbers.length를 확인해 위 반복문 함수처럼 undefined와 같은 값을 반환하세요.
apply()는 배열 요소를 함수 인수로 전달합니다. JavaScript 엔진은 한 번의 호출에서 받을 수 있는 인수 개수에 현실적인 제한을 두며, 그 한도는 실행 환경에 따라 달라질 수 있습니다. 따라서 배열이 충분히 크면 apply() 호출이 실패할 수 있습니다. 큰 입력에는 반복문을 사용하세요. 반복문은 값을 하나씩 살펴보므로 배열 요소마다 인수를 하나씩 전달하는 호출을 만들지 않습니다.