코드 예제
Set 객체
function getRandomNumber(max, min = 1) {
return Math.floor(Math.random() * max) + min;
}
function getUniqueNumberList(count, max, min = 1) {
const list = new Set();
while (count > list.size) {
list.add(getRandomNumber(max, min));
}
return [...list];
}
getUniqueNumberList(3, 10);
// [4, 7, 9]
Set 객체를 활용하면 중복된 값을 제거할 수 있습니다. 매번 중복된 값을 뽑아서 Set 객체에는 단 하나의 동일한 값만 존재하게 됩니다.
max, min 값으로 랜덤으로 뽑을 숫자 범위를 지정해주고 배열 길이만큼 Set 객체가 채워질 때까지 반복해 줍니다.
indexOf 활용
function getRandomNumber(max, min = 1) {
return Math.floor(Math.random() * max) + min;
}
function isUniqueNumber(list, number) {
return list.indexOf(number) === -1;
}
function getUniqueNumberList(count, max, min = 1) {
const list = [];
while (count > list.length) {
const randomNumber = getRandomNumber(max, min);
if (isUniqueNumber(list, randomNumber)) {
list.push(randomNumber);
}
}
return list;
}
getUniqueNumberList(3, 10);
// [1, 6, 7]
위와 같은 방식으로 구현되었지만, 다른 부분으로는 indexOf 메서드를 사용해서 중복 여부를 판단한다는 점입니다.
하지만 아무래도 배열로 숫자를 관리하다 보니 값이 너무 커지면 속도가 현저히 떨어진다는 문제점이 있습니다.
관련 있는 글
https://wezkit.com/random-number