JavaScript

[JavaScript] Array에서 최대값/최소값 구하기 (apply 사용)

JayLee 2020. 4. 11. 21:14
반응형

안녕하세요. Jay입니다.

오늘은 배열에서 최대값, 최소값 구하는 방법을 알아보도록 하겠습니다.

 

일반적으로 배열에서 최대값, 최소값을 구하기 위해서는 반복문을 사용합니다. 아마도 아래 소스와 같이 구현해야하지 않을까 생각합니다. 아주 간단한 소스임에도 불구하고 변수, 반복문, 조건문이 하나씩 들어가 있는 길다면 긴 코드가 구현이 되었습니다.

var array = [1, 2, 3, 4, 5, 6, 7];

function getMax() {
    var max = array[0];
    for(var i = 1; i < array.length; i++) {
        if(max < array[i])
            max = array[i];
    }
    return max;
}

function getMin() {
    var min = array[0];
    for(var i = 1; i < array.length; i++) {
        if(min > array[i])
            min = array[i];
    }
    return min;
}

 

이 소스를 좀 더 간단하게 구현할 수 없을까요? 있습니다!

var array = [1, 2, 3, 4, 5, 6, 7];

function getMax() 
{
    return Math.max.apply(null, array);
}

function getMin() 
{
    return Math.min.apply(null, array);
}

굉장히 짧아졌죠?

 

Function.prototype.apply() 메서드가 등장합니다.

apply() 메서드는 call() 메서드와 같이 주어진 this를 이용하여 함수를 실행시켜주는 메서드입니다.

단, apply() 메서드는 파라매터를 전달할 때, 단일 배열을 사용하고 call() 메서드는 파라매터 목록을 사용하는 것이 차이입니다.

 

예를들어, 아래와 같이 a와 b를 더하는 sum이라는 함수가 있다고 합니다.

function sum(a, b) {
    return a+b;
}


sum.apply(null, [1, 2]);
sum.call(null, 1, 2);

apply()의 경우 this 파라매터와 파라매터를 단일 배열([1, 2])로 전달하고, call()은 각각 인수 목록을 전달하고 있습니다.

그래서 apply() 메서드를 이용하여 파라매터를 단일 배열로 전달하는 방법을 통해 코드를 짧게 변경했습니다.

 

참조:

https://www.jstips.co/en/javascript/calculate-the-max-min-value-from-an-array/

 

Calculate the Max/Min value from an array

The built-in functions Math.max() and Math.min() find the maximum and minimum value of the arguments, respectively.

www.jstips.co

 

반응형