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

JavaScript에서 배열의 숫자를 0~100 범위로 정규화하는 방법

문제 소개

숫자들을 담고 있는 배열이 있을 때, 배열의 모든 값을 0부터 100 사이의 상대적인 값으로 변환하는 함수를 작성해야 한다고 가정해 보겠습니다. 즉, 가장 큰 숫자는 100으로, 가장 작은 숫자는 0으로 변환되며, 나머지 값들은 비율에 따라 0과 100 사이의 적절한 값으로 매핑됩니다.

이러한 정규화(Normalization) 작업은 데이터 시각화, 점수 환산, 차트 스케일 조정 등 다양한 상황에서 유용하게 활용됩니다.

구현 코드

다음은 이를 구현한 코드입니다 −

const numbers = [45.71, 49.53, 18.5, 8.38, 38.43, 28.44];
const mapNumbers = (arr) => {
    const max = Math.max(...arr);
    const min = Math.min(...arr);
    const diff = max - min;
    return arr.reduce((acc, val) => acc.concat((100/diff)*(val-min)), []);
};
console.log(mapNumbers(numbers));

코드 동작 원리

위 코드의 핵심 로직은 다음과 같습니다.

  • Math.max(...arr) : 스프레드 연산자를 사용하여 배열에서 최댓값을 구합니다.
  • Math.min(...arr) : 같은 방식으로 배열에서 최솟값을 구합니다.
  • diff : 최댓값과 최솟값의 차이, 즉 데이터의 전체 범위를 계산합니다.
  • (100/diff)*(val-min) : 각 값에서 최솟값을 뺀 뒤 전체 범위에 대한 비율을 구하고, 여기에 100을 곱해 0~100 사이의 값으로 변환합니다.

실행 결과

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

[
    90.71688942891859,
    100,
    24.59295261239368,
    0,
    73.02551640340218,
    48.74848116646417
]

결과를 살펴보면 가장 큰 값인 49.53100으로, 가장 작은 값인 8.380으로 변환된 것을 확인할 수 있습니다. 나머지 값들 역시 각자의 비율에 맞춰 0과 100 사이의 값으로 정확하게 매핑되었습니다.