난수 생성하기
자바스크립트에서 특정 범위 내에서 난수(무작위의 숫자)를 생성하는 방법에 대해서 살펴보겠습니다.
자바스크립트의 내장 객체 Math의 random() 메소드를 사용합니다.
Math.random();
0 이상 1 미만의 실수를 반환합니다.
예시
const getRandom = () => Math.random();
console.log(getRandom());
console.log(getRandom());
console.log(getRandom());
console.log(getRandom());
console.log(getRandom());
// 0.1042365462750956
// 0.3437076315867258
// 0.18289290463351882
// 0.9812315629104096
// 0.43594363340036235
getRandom 함수는 생성된 난수를 반환하는 함수입니다. 주석에서와 같이 0 이상 1 미만의 실수 중에 무작위로 값이 생성됩니다.
min이상 max미만의 실수 중에 무작위로 생성하기
const getRandom = (min, max) => Math.random() * (max - min) + min;
console.log(getRandom(1, 10));
console.log(getRandom(1, 10));
console.log(getRandom(1, 10));
console.log(getRandom(1, 10));
console.log(getRandom(1, 10));
// 4.316012132229984
// 7.456132504712491
// 2.6580729701707844
// 8.938877949131957
// 6.4930161549064795
1과 10을 인자로 전달해서 1 이상 10 미만의 난수를 생성했습니다.
참고) 범위를 정하는 식을 도출하면 다음과 같습니다.
1) 0 <= Math.random() < 1, 이건 정해진 룰입니다.
0 <= Math.random() < 1 | 0이상 1미만 |
2) 1)에서 모든 항에 max-min을 곱하면
0 <= Math.random()*(max - min) < max - min | 0이상 max-min미만 |
3) 2)에서 모든 항에 min을 더하면
min <= Math.random()*(max - min) + min < max | min이상 max미만 |
min이상 max미만의 정수(소수점 없는 수)를 생성할 때에는 Math.floor() 메소드를 활용할 수 있습니다.
Math.floor(x);
주어진 숫자 이하의 정수중에서 가장 큰 수를 반환합니다.
= 소수점을 날립니다.
위에서 만든 난수 생성식을 Math.floor()의 인자로 넣어주면 됩니다.
const getRandom = (min, max) => Math.floor(Math.random() * (max - min) + min);
console.log(getRandom(1, 10));
console.log(getRandom(1, 10));
console.log(getRandom(1, 10));
console.log(getRandom(1, 10));
console.log(getRandom(1, 10));
// 3
// 1
// 8
// 9
// 4
음수(-)에서도 잘 작동합니다.
const getRandom = (min, max) => Math.floor(Math.random() * (max - min) + min);
console.log(getRandom(-10, -1));
console.log(getRandom(-10, -1));
console.log(getRandom(-10, -1));
console.log(getRandom(-10, -1));
console.log(getRandom(-10, -1));
// -5
// -10
// -2
// -5
// -3
'자바스크립트' 카테고리의 다른 글
[JAVASCRIPT] 배열 vs 객체, 배열보다 객체를 써야 하는 경우, 배열을 객체로 바꾸는 방법(array to object) (0) | 2024.01.03 |
---|---|
[JAVASCRIPT] 문자열이 특정 문자열로 시작하는지(or 끝나는지) 확인하는 방법 - startsWith(), endsWith() (1) | 2024.01.03 |
[JAVASCRIPT] 캐싱 함수 만들기 / 데코레이터(decorator) (1) | 2021.08.30 |
[JAVASCRIPT] 중첩 객체에서 특정 프로퍼티의 합 구하기, 재귀함수 활용 (0) | 2021.08.19 |
[JAVASCRIPT] 구조 분해를 사용하여 변수값 교환하기 (0) | 2021.08.19 |