2017-12-10 18 views
1

저는 작은 프로젝트를 만들어서 배우려고 노력하면서 코딩과 자바 스크립트에 초보자입니다. StackOverFlow에서 오랜 시간 lurker 및 첫 번째 포스터. 다행 이군!JavaScript로 무작위 목록 생성하기

나는 내 문제를 설명하려고합니다

: 나는 온라인 아이스 하키 게임 종류의 리그를 운영하는 취미로

합니다. 시즌 중 회의 A의 팀은 회의 B의 팀과 한번씩 경기를합니다. 나는 공정하고 모두에게 가끔씩 홈 경기 및 원정 경기 (이 경기에서 중요 함)를 제공합니다. 이는 몇 개월마다 거대한 목록을 만들어야 함을 의미합니다. 이 작업을 수행합니다.

내 아이디어는 자바 스크립트가있는 버튼을 클릭하여이 모든 작업을 수행하는 것입니다. 첫 번째 질문은 : 어떤 종류의 기술 JavaScript/JQuery로 이것을 배워야하는지? (그리고 선택에 따라 underscore.js, 예를 들어 몇 가지 정말 멋진 기능이 있다는 것을 알았습니다.) 나는 꽤 초보적이고 가능한 한 간단하게 유지하려고 노력하고 있습니다. 아래에 나는 나의 계획을 쓸 것이다, 제안은 인정했다!


우선, 사용자가 팀 목록을 붙여 넣을 두 개의 HTML 요소가 있습니다. 그런 다음 각 컨퍼런스의 팀을 포함하는 두 개의 JavaScript Array를 작성합니다.

function makeArrayA() { 
var arrayA = $('.confA').val().split('\n'); 
return arrayA; 
} 

위대한, 저에게 모든 팀을 포함하는 arrayA (및 자체적으로 유사한 기능을 가진 arrayB)를 제공합니다. 단순한 지금까지.

이 다음 단계는 내가 정말로 붙어있는 곳입니다. 두 개의 컨퍼런스에서 모두 10 개의 팀이 있다고 가정 해 보겠습니다. 이는 5 개의 집과 5 개의 원거리 게임을 의미합니다. 하지만 회의에 9 개 팀만 참여할 수도 있습니다. 다른 팀은 9 명, 기타 팀은 9 명뿐입니다. 그래서 몇몇 팀은 5 번의 홈 매치를 가지며, 약간의 팀은 4 번을 할 것입니다. 이렇게하면 코드에 필요한 논리를 따라 잡기가 점점 더 어려워집니다. 기능 이상

function howManyHomeGames() { 
var A = makeArrayA().length; 
var B = makeArrayB().length; 
} 

나에게 내 각 배열의 길이를 제공하고 그 후 나는 큰, 여러 시나리오를 계속 IF의를 사용할 수 있습니다. 어쨌든 여기는 내가 어떻게 계속 해야할지 모르겠다.

작은 부분으로자를 수 있으면 이처럼 큰 문제를 해결할 수 있다는 것을 알고 있습니다. 이것이 내가 도움이 필요한 것입니다. 나는 초보자로서 나머지 부분을 보는 것은 장님이며 IF의 무작위 화 기능에 대한 하나의 거대하고 복잡하고 혼란스러운 정글에서 나머지를 모두하려고 노력할 것입니다.

아마도 confA와 confB에서 임의의 팀을 가져 와서 배열 (JSON 배열일까요?)에 배치해야합니다. 그런 다음 임의로 선택된 쌍이 이미 존재하는지 확인하고 다른 필터도 지나치게 확인하여 맨 끝까지 다음 하나를 선택합니다.

내 질문 :

  • 어떤 기술/I가 이 프로젝트를 확인하고 가능한 한 간단하게 유지하기 위해 체크 아웃해야합니다 문서의 일부?
  • 위에 나열된 것 외에도주의해야 할 것이 있습니까?
  • JSON Array는 이것에 대한 좋은 아이디어입니까?
  • 삽입 한 코드 블록이 유효/우수 사례 위에 있습니까?
  • 어떻게하면 작은 부분으로 나누어야합니까?
  • 팀 수가 고르지 않은 경우 처리 방법은 무엇입니까? 각각의 상황마다 처음부터 전체 기능을 작성 하시겠습니까?

참고 : 나는 나를 위해 모든 일을 사람을 원하지 않는다, 난 그냥 올바른 방향에 작은 푸시가 필요합니다. 모두에게 미리 감사드립니다.

+0

JSON 팀 일정 작성 등의 다른 기능은 "자바 스크립트 객체 표기법"에 대한 짧은 할 것입니다. 아마 당신이 의미하는 것은 "JavaScirpt Object"이지만 JS의 모든 것은 객체입니다 - 그래서 JavaScript Array ... –

+0

아마 여기에 원하는 것은 배열과 집의 개수와 같은 값을 보유하고있는 객체 일 것입니다. 원거리 게임 및 그 대상의 일정 개체에서 누가 누구를 연기 하는지를 결정합니다. –

+0

예, "배열을 보유하고있는 객체"는 내가 필요한 것처럼 들립니다. 나는 아직도 모든 용어들에 대해 "조금은"clunky이다. 귀하의 의견을 보내 주셔서 감사합니다! – Roopeg

답변

0

시작하기에 앞서 물건을 담을 수있는 객체 (myObject)를 만듭니다. 이것은 아마도 "기본"보다 약간 더 복잡 할 것이지만 그 객체를 리그 팀, 함수 등과 같이 "보유"할 수 있습니다.

console.log에 입력하면 주석이 해제되어 실행되는 것을 볼 수 있습니다. 귀하의 질문에 따라 이것은 단지 "물건을 가지고 시작했습니다"입니다. 기본적으로는 문자열 -

당신은 등

// create object to hold stuff 
 
var myObject = { 
 
    mydata: { 
 
    league: { 
 
     teams: [] 
 
    }, 
 
    schedules: {} 
 
    }, 
 
// function objects 
 
    myfuncs: { 
 
    init: function() { 
 
     //console.log("inits:", this); // shows that 'this' is myfuncs 
 
     // get the teams when click button 
 
     $('#getteams').on('click', this.getTeams);// no clear, keeps adding... 
 
     this.newfunc();// show use of added function 
 
    }, 
 
    getTeam: function(myteams, name, whereat) { 
 
     var tconf = $(whereat).val(); 
 
     // console.log("w:", whereat, "conf=:", tconf); 
 
     var t = tconf.split('\n');// caution, blank lines become a team here...might be better to separate by comman "myteam,mysecondteam" 
 
     console.log("t,tconf:", t, tconf); 
 
     $.each(t, function(index, value) { 
 
     // add to my team array (passed in here as myteams) 
 
     myteams.push({ 
 
      teamName: value, 
 
      teamConference: name 
 
     }); 
 
     }); 
 
    }, 
 
    getTeams: function() { 
 
     // console.log(this); // 'this' is the button here passed by jQuery 
 
     // verbose called named function, there are other ways to do this 
 
     myObject.myfuncs.getTeam(myObject.mydata.league.teams, "A", '#conf-a'); 
 
     myObject.myfuncs.getTeam(myObject.mydata.league.teams, "B", '#conf-b'); 
 
     // you will need to get each "list of teams" based on the conf name, this does not do that 
 
     alert(myObject.mydata.league.teams.length);// however many got added based on paste 
 
    }, 
 
    } 
 
}; 
 
// add a new function to my object: 
 
myObject.myfuncs.newfunc = function(){alert("innewfunc");}; 
 
myObject.myfuncs.init(); // call to init my things 
 
alert(myObject.mydata.league.teams.length); // alerts 0, not processed yet
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<textarea id="conf-a"></textarea> 
 
<textarea id="conf-b"></textarea> 
 
<button id="getteams">Get Teams</button>

+0

이것은 단지 "시작하기"에 불과하며 모든 질문에 대답하지 않는다는 점에 유의하십시오. 이것은 너무 광범위하게 쓰일 수 있습니다. 실제로는 "먼저 시도"하고 도움이 필요한 것에 기초하여 제기되어야하는 별도의 질문입니다. 고르지 못한 카운트 등에서 스케줄을 만드는 방법과 같이. –

+0

큰 감사! 모든 것을 이해하는 데 시간이 걸렸습니다 (귀하의 의견은 저를 구 했습니다). 그러나 당신은 정말로 나를 많이 도왔습니다! 나는 이것이 내가 며칠 동안 바쁘게 할 것이라고 생각한다. – Roopeg