[JavaScript] 무작위 숫자 5개를 뽑아 오름차순으로 정렬 2
Lpla
·2021. 1. 17. 21:34
반응형
지난 포스트 : [JavaScript] 무작위 숫자 5개를 뽑아 오름차순으로 정렬 1
지난 번에 무작위 숫자 5개를 뽑아 오름차순으로 정렬하는 방법에 대해 알아보았다.
var 추출 = [];
for (i = 1; i <= 5; i+=1) {
var 랜덤숫자 = Math.floor(Math.random() * 20) + 1;
추출.push(랜덤숫자);
}
추출.sort(function(a, b){
return a - b;
});
console.log(추출);
// 결과
// [9, 9, 22, 41, 49]
하지만 중복되는 숫자를 제거하지 못하고 그대로 출력하는 문제가 남아 있다.
중복을 검사하는 방법은 indexOf 를 사용하면 된다.
indexOf는 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환한다.
var array = [2, 9, 9, 5];
array.indexOf(2); // 0
array.indexOf(9); // 1
array.indexOf(5); // 3
array.indexOf(7); // -1
존재하지 않을 때 음수값이 나온다는 점을 이용하여 중복을 검사할 수 있다.
var 추출 = [];
for (i = 1; i <= 5; i+=1) {
var 랜덤숫자 = Math.floor(Math.random() * 20) + 1;
if (추출.indexOf(랜덤숫자) === -1) {
추출.push(랜덤숫자);
}
}
추출.sort(function (a, b) {
return a - b;
});
console.log(추출);
// 결과
// [2, 6, 7, 8, 20]
// 결과
// [3, 18, 19, 20]
// 결과
// [4, 9, 13, 20]
하지만 결과를 보면 중복이 있을 경우 숫자를 4개 이하로 반환하는 것을 알 수 있다.
우리는 중복을 제외하고 총 5개의 숫자가 반환되길 원한다.
이 문제는 if문을 사용하면 쉽게 해결할 수 있다.
var 추출 = [];
for (i = 1; i <= 5; i += 1) {
var 랜덤숫자 = Math.floor(Math.random() * 20) + 1;
if (추출.indexOf(랜덤숫자) === -1) {
추출.push(랜덤숫자);
} else {
i--
}
}
추출.sort(function (a, b) {
return a - b;
});
console.log(추출);
중복일 경우 i 값을 1 낮춰, 반복문을 한 번 더 돌리도록 하였다.
// 결과
// [4, 11, 12, 16, 19]
// 결과
// [2, 6, 7, 12, 15]
비로소 우리가 원하는 중복 없는 5가지 숫자를 오름차순으로 정렬하는 배열을 구할 수 있다.
반응형