Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 배열에서 특정 숫자와 가장 가까운 값 찾기

이번 글에서는 첫 번째 인자로 숫자 배열, 두 번째 인자로 하나의 숫자를 받아, 배열 안에서 두 번째 인자로 주어진 숫자와 가장 가까운 값을 찾아 반환하는 JavaScript 함수를 작성해 보겠습니다.

예를 들어 다음과 같은 배열과 숫자가 있다고 가정해 봅시다.

const arr = [34, 67, 31, 53, 89, 12, 4];
const num = 41;

41과 가장 가까운 숫자는 차이가 7인 34이므로, 함수의 결과값은 34가 되어야 합니다.

구현 아이디어

핵심 로직은 간단합니다. 배열을 처음부터 끝까지 순회하면서 각 요소와 목표 숫자 사이의 절댓값 차이를 계산하고, 그중 차이가 가장 작은 요소를 기억하면 됩니다.

  1. 배열의 첫 번째 요소를 초기 '가장 가까운 값'으로 설정합니다.
  2. 목표 숫자와의 차이(절댓값)를 초기 기준값으로 저장합니다.
  3. 배열을 순회하며 새로 계산한 차이가 기존 기준값보다 작으면, 해당 요소와 차이를 새로운 기준으로 갱신합니다.
  4. 순회가 끝나면 마지막에 남은 값을 반환합니다.

예제 코드

위 로직을 구현한 코드는 다음과 같습니다.

const arr = [34, 67, 31, 53, 89, 12, 4];
const num = 41;

const findClosest = (arr = [], num) => {
    let curr = arr[0];
    let diff = Math.abs(num - curr);
    for (let val = 0; val < arr.length; val++) {
        let newdiff = Math.abs(num - arr[val]);
        if (newdiff < diff) {
            diff = newdiff;
            curr = arr[val];
        }
    }
    return curr;
};

console.log(findClosest(arr, num));

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

34

추가 팁: reduce()를 활용한 간결한 방법

같은 로직을 Array.prototype.reduce() 메서드를 사용하면 더욱 간결하게 표현할 수 있습니다.

const findClosest = (arr = [], num) =>
    arr.reduce((closest, current) =>
        Math.abs(num - current) < Math.abs(num - closest) ? current : closest
    );

두 방법 모두 시간 복잡도는 O(n)으로 동일하지만, reduce() 버전은 코드가 짧고 가독성이 좋다는 장점이 있습니다. 상황에 맞게 선택하여 사용하시면 됩니다.