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

JavaScript 배열에서 임의의 값(랜덤 요소) 선택하기

JavaScript 배열에서 임의의 값을 선택하려면 Math.random() 메서드를 활용하면 됩니다. 이 글에서는 Fisher-Yates 셔플 알고리즘을 응용해 배열 전체를 무작위로 섞은 뒤, 원하는 개수만큼 임의의 값을 추출하는 방법을 예제와 함께 살펴봅니다.

예제 코드

var subjectNames = ["Javascript", "MySQL", "Java", "MongoDB", "Python", "Spring Framework"];
for(var index = subjectNames.length - 1; index > 0; index--){
    var rndIndex = Math.floor(Math.random() * (index + 1));
    var subjNameTemp = subjectNames[rndIndex];
    subjectNames[rndIndex] = subjectNames[index];
    subjectNames[index] = subjNameTemp;
}
var getRandomSubjectName = subjectNames.slice(0, 3);
console.log(getRandomSubjectName);

코드 동작 원리

핵심 로직을 단계별로 살펴보면 다음과 같습니다.

  • Math.random(): 0 이상 1 미만의 난수를 반환합니다.
  • Math.floor(Math.random() * (index + 1)): 0부터 현재 인덱스(index) 사이의 정수 중 하나를 무작위로 선택합니다.
  • 요소 교환(swap): 선택된 인덱스의 요소와 마지막 위치의 요소를 서로 바꿔가며 배열 전체를 무작위로 섞습니다. 이 방식이 바로 널리 알려진 Fisher-Yates 셔플입니다.
  • slice(0, 3): 섞인 배열에서 앞쪽 3개의 요소를 잘라내어 임의의 값들을 얻습니다.

이 방식은 모든 요소가 동일한 확률로 선택되므로 편향 없는 공정한 랜덤 추출이 가능하다는 장점이 있습니다.

프로그램 실행 방법

위 프로그램을 실행하려면 Node.js 환경에서 다음 명령어를 사용합니다.

node fileName.js

여기서는 파일 이름이 demo178.js라고 가정하겠습니다.

출력 결과

실행하면 아래와 같은 결과가 출력됩니다. 난수를 사용하기 때문에 실행할 때마다 선택되는 값은 달라집니다.

PS C:\Users\Amit\javascript-code> node demo178.js
[ 'Javascript', 'MySQL', 'Python' ]