toggle menu

[JavaScript] 배열 요소 중 최대값 최소값 찾기

2012. 10. 22. 10:11 JavaScript

숫자로 이루어진 배열 내에서 가장 큰 숫자 혹은 가장 작은 숫자를 찾아야 할 경우 FOR문을 돌리는 단순한 방법 외에 두 가지 방법이 더 존재한다.

먼저 Math 객체를 사용하는 방법이 있다. Math 객체에 가장 큰 숫자, 작은 숫자를 구하는 max, min 메서드가 존재하는데 여기에 apply 메서드를 사용하면 숫자로 이루어진 배열을 파라메터로 전달할 수 있게 된다. 아래의 예를 보자.


Math.max.apply(null, 배열); // 최대값
Math.min.apply(null, 배열); //최소값

var test = [0, 77, 33, 11, 99, 88, 55];

Math.max.apply(null, test); //결과값은 99
Math.min.apply(null, test); //결과값은 0


한 가지 조심해야할 부분이 있는데, 배열 내에 비교 불가능한 값이 있다면 결과는 NaN 으로 나오게 됨을 주의해야 한다.


대부분의 경우에는 Math 객체를 이용해도 무리없이 결과를 얻을 수 있지만 큰 배열(~10⁷ elements) 정도되면, Math.min 과 Math.max 를 사용할 경우, "RangeError: Maximum call stack size exceeded" 오류가 나게 된다.
Math 객체를 이용하지 않고 더 메모리 소모도 적은 아래와 같은 방법도 있다.


var array = [1, 10, 5, 11, 2];

//최대값
var max = array.reduce( function (previous, current) { 
	return previous > current ? previous:current;
});

//최소값
var min = array.reduce( function (previous, current) { 
	return previous > current ? current:previous;
});


이 외에도 아래와 같이 slice와 sort 등 Array 객체의 내장 메서드만을 사용한 방법도 존재한다.

var min = [1, 20, 11, 88, 3].slice(0).sort(function(a,b){a>b})[0];
var max = [1, 20, 11, 88, 3].slice(0).sort(function(a,b){a<b})[0];

["b","a","d","c"].slice(0).sort()[0]; //"a"
["b","a","d","c"].slice(0).sort().reverse()[0]; //"d"
["b","a","d","c"].slice(0).sort(function(a,b){return a > b;})[0]; //"a"
["b","a","d","c"].slice(0).sort(function(a,b){return a < b;})[0]; //"d"

JavaScript 관련 포스팅 더보기