과거 프로그래밍 자료들/Javascript&typescript
Let's Get IT 자바스크립트 프로그래밍 - 로또 번호 맞추기
평부
2022. 7. 22. 18:02
* 출처 : https://thebook.io/080270/part02/ch06/
* for문 대신 while문을 쓸 때
- 조건이 간단하면 while문, 복잡하면 for문
* 45개의 숫자를 랜덤하게 섞어서 배열에 넣기
- array.splice() : splice() 메서드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경
const plane = ['F/A-18 슈퍼 호넷', 'F-14A 톰캣', 'P-51 머스탱', 'F-35C 라이트닝 Ⅱ'];
plane.splice(1, 0, 'Darkstar');
console.log(plane); //['F/A-18 슈퍼 호넷', 'Darkstar', 'F-14A 톰캣', 'P-51 머스탱', 'F-35C 라이트닝 Ⅱ']
//while문
const candidate = Array(45).fill().map((v, i) => i + 1);
const shuffle = [];
while (candidate.length > 0) {
const random = Math.floor(Math.random() * candidate.length);
const spliceArray = candidate.splice(random, 1);
const value = spliceArray[0];
shuffle.push(value);
}
console.log(shuffle);
//for문
const candidate = Array(45).fill().map((v, i) => i + 1);
const shuffle = [];
for(let i = candidate.length; i> 0; i--) {
const random = Math.floor(Math.random() * i);
const spliceArray = candidate.splice(random, 1);
const value = spliceArray[0];
shuffle.push(value);
}
console.log(shuffle);
* sort((a, b) => a-b) → 오름차순이 됨
* sort((a, b) => b -a) → 내림차순이 됨
const numbers = [1, 35, 13, 44, 39, 33, 8, 30, 3, 22, 17, 20, 41, 10, 23, 25, 5, 28, 6, 18, 43, 12, 15, 16, 7, 40, 11, 31, 29, 2, 26, 34, 27, 37, 21, 38, 14, 45, 4, 42, 9, 24, 19, 36, 32];
numbers.sort((a,b) => a -b);
//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45]
numbers.sort((a, b) => b - a);
//[45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
* setTimeout
- setTimeout 안에 넣는 함수는 특정 작업(지정한 시간까지 기다리기) 이후에 추가로 실행되는 함수 = 콜백 함수
// name 3명이 1초 1.1초 1.2초에 한 번씩 나옴
//name 3명이 다 나오고 마지막에 North Isaland가 나오게 함(5초 뒤)
//매개변수 사용(setTimeout을 동일하게 사용함)
<body>
<div id="name"></div>
<br />
<div id="state"></div>
<script>
const $name = document.querySelector('#name');
const $state = document.querySelector('#state');
const dataName = ['Maverick', 'Cyclone', 'Hondo'];
const dataState = ['North Island'];
function changeThings(blah, $parent) {
const $data = document.createElement('div');
$data.className = 'data';
$data.textContent = blah;
$parent.append($data);
}
for (let i = 0; i < dataName.length; i++) {
setTimeout(() => {
changeThings(dataName[i], $name);
}, 1000 * (i + 1));
}
setTimeout(() => {
changeThings(dataState[0], $state);
}, 5000)
</script>
</body>
* var과 let의 차이
- var = 함수 스코프 / let = 블록 스코프 라서 함수, if 문, for 문에서 접근 범위의 차이를 보임
- 또한, let을 사용할 때는 for 문 안에서 let 변수의 값이 고정되므로 var와는 실행결과가 달라짐
* 로또 번호 맞추기 (색상 추가)
더보기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>로또 추첨기 - 색상 추가</title>
<style>
.ball {
display: inline-block;
border: 1px solid black;
border-radius: 20px;
width: 40px;
height: 40px;
line-height: 40px;
font-size: 20px;
text-align: center;
margin-right: 20px;
}
</style>
</head>
<body>
<div id="result">추첨 결과는? </div>
<div id="bonus">보너스 숫자 : </div>
<script>
const $result = document.querySelector('#result');
const $bonus = document.querySelector('#bonus');
const candidate = Array(45).fill().map((v, i) => i + 1);
const shuffle = [];
while (candidate.length > 0) {
const random = Math.floor(Math.random() * candidate.length);
const spliceArray = candidate.splice(random, 1);
const value = spliceArray[0];
shuffle.push(value);
}
console.log(shuffle);
const winBalls = shuffle.splice(0, 6).sort((a, b) => a - b);
const bonus = shuffle[6];
console.log("winBall", winBalls);
console.log("bonus", bonus);
function colorize(number, $tag) {
if (number < 10) {
$tag.style.backgroundColor = 'red';
$tag.style.color = 'white';
} else if (number < 20) {
$tag.style.backgroundColor = 'orange';
$tag.style.color = 'black';
} else if (number < 30) {
$tag.style.backgroundColor = 'yellow';
$tag.style.color = 'black';
} else if (number < 40) {
$tag.style.backgroundColor = 'blue';
$tag.style.color = 'white';
} else {
$tag.style.backgroundColor = 'green';
$tag.style.color = 'black';
}
}
function drawBall(number, $parent) {
const $ball = document.createElement('div');
$ball.className = 'ball';
$ball.textContent = number;
$parent.append($ball);
colorize(number, $ball);
}
for (let i = 0; i < winBalls.length; i++) {
setTimeout(() => {
// const $ball = document.createElement('div');
// $ball.className = 'ball';
// $ball.textContent = winBalls[i];
// $result.append($ball);
drawBall(winBalls[i], $result)
}, 1000 * (i + 1));
}
setTimeout(() => {
// const $ball = document.createElement('div');
// $ball.className = 'ball';
// $ball.textContent = bonus;
// $bonus.append($ball);
drawBall(bonus, $bonus);
}, 7000);
</script>
</body>
</html>