Let's Go javascript (#3)

박호연·2021년 11월 4일
0

미니 프로젝트 - 숫자야구 게임

룰은 4개의 숫자를 한사람이 무작위로 선택해서 말하고

반대편 사람이 정해놓은 숫자 4개의 순서와 값이 모두 같으면 - 홈런

반대편사람이 정한 숫자 하나가 같다면 - 1스트라이크

반대편 사람이 정해놓은 숫자는 같지만 순서가 다를경우 - 볼

이렇게 총 10번의 기회가 주어지고 주자는 이 값들을 유추해서 4개의 숫자의 순서와 값을 알아맞춰야한다

splice() 메서드에 대해 말해보자면
splice(startNum, deleteCount, insertValue) 라고 볼 수 있으며

startNum(시작 순서) 부터, deleteCount(제거개수) 몇개를 제거하고 , insertValue(넣을 값) 값을 몇개 넣어라
라는 의미를 가지고 있다고 볼 수 있다.

const numbers = []; // 1, 2, 3, 4, 5, 6, 7, 8, 9
for(let n = 0; n < 9; n += 1) { // 9번 반복한다.
numbers.push(n + 1);
}

const answer = [];
for (let n = 0; n < 4; n += 1) { // 네번 반복
const index = Math.floor(Math.random() * numbers.length); // 0-8 랜덤정수
answer.push(numbers[index]);
numbers.splice(index, 1);
}
console.log(answer);

처음에는 const index = Math.floor(Math.random() * 9); 이런식의 방향이었지만,

이렇게 될경우 예를들어 랜덤값 9가 나오고 answer.push(numbers[index]);

여기서 배열의 9번째 값을 answer엔 추가 numbers엔 삭제시켜야되는데

삭제는 계속 시켜서 numbers의 순서는 줄어드는데 배열의 순서는 똑같이 요구한다면

결국엔 배열이 부족한 상황인데도 9번째 배열 8번째 배열같은 높은 순서를 가리킬수도 있다

그래서 numbers의 글자 수만큼을 랜덤값으로 지장해서 저장하면 undefined가 안나온다.

글로적어도 나중에 보면 이해하지 못할텐데 이건 익숙해져야 할것같다.

새로고침하면 초기화되는 기본동작을 막는다.

event.preventDefault(); // 기본 동작 막기

new Set(input).size 를 설명하면

Set은 중복을 허용하지 않는 특수한 배열이다. New는 예약어 인데 이것은 추후에 설명이있다.

New Set(‘1231’) 을 하면 Set 내부에는 1, 2, 3만 들어간다. 이를 통해 Set의 요소 개수를 세면 중복된 값이 있는지 아닌지를 검사할수있다.

( 왜냐하면 중복된값을 제거했을때 4글자가 안되면 중복됨을 증명하는것이 되므로)

그리고 Set의 요소개수를 구할 때는 length가 아니라 size를 사용한다.

append 는 뒤에서부터 오는 텍스트를 추가한다. 문자열이나 여러가지를 추가할수있는데 appendChild 와 다른점은 appendChlid메서드는 한번에 오직 하나의 노드만 추가할수있다. 또한 return값을 반환할수있다.

forEach는 배열의 모든 요소를 반복하며 콜백함수를 실행하는것이다.
Ex) const arr = [1, 3, 5, 7, 9];
Arr.forEach(function(e) {
console.log(e);
});

함수(e)를 저장하고 1~9까지 반복해서 실행한다.

profile
주니어 개발자 박호연입니다.

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN