블루스카이(Bluesky) 소셜 추첨기(리포스트, 인용, 좋아요, 답글)를 제작했습니다. :: Pure Ani's Blog
페이지 정보

본문
직접 추첨기 그려본 로또 추첨기의 순서도입력받은값 유효성 검사 1.숫자를 6개 입력해야됨2. 중복된 숫자 X3. 1부터 45까지만 입력 문자열(배열)로 입력받은 값을 배열의 함수 trim, split, map, find 등의 함수를 이용해서 유효성 검사string.trim() ->문자열의 앞과 끝의 공백문자를 제거string =" 1,2,3,4,5,6 "// " 1,2,3,4,5,6 string.trim() // 1,2,3,4,5,6split() ->"안에들어있는 값 기준으로 문자열을 분리함.우리가 작성하는 로또추첨기의 경우 숫자입력을 콤마(,) 기준으로 입력받기때문에 split(,) 이렇게작성함string ϑ,2,3,4,5,6" 추첨기 myNumbers =string.split(,) //myNumbers =[1,2,3,4,5,6]arr.map() ->배열의 전체 요소을 순회하며 함수를 호출, 함수 호출결과를 반환const myNumbers =string.split(,).map((v) =>parseInt(v.trim()));const myNumbers =string.split(,).map(function(v){ return parseInt(v.trim()); });split으로 분리한 모든 문자열들을 map을 사용해서 다시 숫자형으로 변경map ->배열의 전체요소들 하나씩 함수를 실행한 결과를 배열로 반환myNumbers =[1,2,3,4,5,6] ->myNumbers =[1,2,3,4,5,6]arr.length ->배열의 크기반환Set ->중복을 허용하지않는 컬렉션(객체)new Set() : 셋을만듬..size : 셋의 크기를 반환 (.length가 아님에 유의)if (new Set(myNumber).size 추첨기 !=ϖ) { return alert(중복된 숫자를 입력했습니다.); }myNumber에 들어있는값으로 Set을 생성, 크기를 확인, 크기가 6이 아니라면(작다면) 중복된 값이 있었다는것간단한 예를 들자면, myNumber=[1,1,2,3,4,5]myNumber =new Set(myNumber) //[1,2,3,4,5], 크기 5arr.find ->배열에서 조건에맞는 요소를 찾을때 사용. 마찬가지로 요소전체에대해 함수가 호출됨. 조건에맞는 요소를찾으면 true를 반환하고 탐색중단. 찾지못했으면 undefined 반환 if (myNumbers.find((v) =>v >45 || v <1))myNumbers에 들어있는 요소들에 대해서 45보다 크거나 1보다 작은 추첨기 값을 찾을경우 true를 반환1부터 45개의 공을 섞어서 당첨숫자 6개와 보너스 숫자 1개 뽑기Array(45) ->45개의 빈배열을 만듬.arr.fill() ->arr의 요소들에 undefined를 채움.arr.map(element, index) ->요소들에대해 함수호출 , 함수 반환값 저장 이때 fill()이 선행되어야되는이유빈 배열에 map()은 실행되지않음. 때문에 fill()로 undefined값을 채우고 map을실행.arr.splice(index,size) ->index부터 size만큼 배열에서 잘라냄const spliceArray 㷊ndidate.splice(random, 1);random(랜덤으로 뽑은1~45의값)인덱스에 있는 값 1개 제거이때 splice로 잘라진 값은 배열이기 때문에 값을 전달할때 추첨기 주의해야함( const value =spliceArray[0]) 배열이 조금다르게 느껴지는이유가 splice를 사용하면 빈공간은 뒤에있는 배열의 요소들로 다시 채워짐, 즉 배열의 크기가 작아진다, 때문에 while문을 실행할때마다 candidate.length는 1씩작아짐. 이런 부분들이 아직 적응이안된다.arr.push ->배열에 값을추가.Math.random()Math.random은 0~1까지 무작위의 수를 생성함.0 ≤ Math.random() <1 의 범위식을 0≤ Math.random() * 9 <9 로 변경 0부터 8.xxxxx까지 무작위로나옴. 이때 Math.floor은 뒤에 소숫점을 날리는 함수.const random =Math.floor(Math.random() 추첨기 * candidate.length);그래서 이코드는 처음엔 0부터44 ->0부터 43 ->0부터 42 .... 랜덤 인덱스가 뽑아진다.고민 했던부분자바스크립트에 대한 고민은아니고 공을 랜덤으로 뽑는알고리즘에 대한 고민이다.코드의 알고리즘이 1부터 45까지숫자를 섞어놓은 배열을 앞에서부터 자르는 방법으로 랜덤한 공을 뽑는방식이다.내가 생각했을때 굳이 1부터45까지 전체적으로 섞어야되나?? 이 생각에서 시작해서 평범하게 생각한 알고리즘은 단순히 1부터 45 숫자가 들어있는 배열에서 랜덤 하게 7번 뽑는것이다. (이러한 기능을하는 메서드가 자바에 추첨기 있었던거같음) 그래서 이렇게 생각한거같음.최악의 경우엔 random 값이 계속같게나오면 연산횟수가 엄청길어질수있다. splice를 이용해서 추가한 숫자는 삭제를 한다면 아.. 뭐 근데 사실상 처음코드랑 똑같긴하네 ;;공부자료제로초(조현영) | , 재미있는 게임을 만들며 배워보는 JavaScript ???? 이 강의에서는? [사진] JavaScript의 기본 개념을 완벽히 다루고,실습을 통해 배운 내용을 더 쉽게 체화해봐요. JavaScript, 이 강의로 자율학습! [사진] 자바
- 이전글purchase Ivermectin 25.04.17
- 다음글продолжить 25.04.17
댓글목록
등록된 댓글이 없습니다.