2016-08-02 4 views
2

그래서 여기에 몇 가지 코드가 있습니다 먼저 간단한 무작위 # 발생기와 배열 선택 기능 :자바 스크립트에서 여러 배열을 정의하는 방법

function Rand(min, max) { 
    return parseFloat(Math.floor(Math.random() * max - min + 1))) + parseFloat(min); 
} 

function Choose(arr) { 
    //Returns an element from an array at random. 
    return arr[Math.floor(Math.random() * arr.length)]; 
} 

와 두 번째 카드 실업자 :

function CardDeck() { 
    var Cd = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]; 
    var H = []; 
    var S = []; 
    var D = []; 
    var C = []; 
    var Result = []; 
    var Dk = document.getElementById("Deck Count").value; 

    for (i = 0; i < Cd.length; i++) { 
    S[i] = Cd[i] + " of Spades"; 
    H[i] = Cd[i] + " of Hearts"; 
    C[i] = Cd[i] + " of Clubs"; 
    D[i] = Cd[i] + " of Diamonds"; 
    } 

    if (Dk == "4") { 
    P = S.concat(C, D, H); 
    } else if (Dk == "5") { 
    var St = []; 
    for (i = 0; i < Cd.length; i++) { 
     St[i] = Cd[i] + " of Stars"; 
    } 
    P = S.concat(C, D, H, St); 
    } else if (Dk == "6") { 
    var Rk = []; 
    var Wh = []; 
    for (i = 0; i < Cd.length; i++) { 
     Rk[i] = Cd[i] + " of Rackets"; 
     Wh[i] = Cd[i] + " of Wheels"; 
    } 
    P = S.concat(C, D, H, Rk, Wh); 
    } 

    for (i = 0; i < Dk * Cd.length; i++) { 
    var Q = Choose(P); 
    R = P.indexOf(Q); 
    Result[i] = (i + 1) + ": " + Q; 
    P = P.slice(0, R).concat(P.slice(R + 1)); 
    } 

    document.getElementById("Cards").innerHTML = Result.join("\n"); 
} 

이 작업을 더 빨리 수행하거나 적어도 = [], b = [] ...을 수행하는 대신 배열을 빨리 선언하는 쉬운 방법이 있습니까? 각 작업마다 시간이 많이 걸리고 지루할 수 있습니다. 당신은 이런 식으로 반복 var를 입력 피할 수

+1

더 빠를 필요는 없지만 이러한 배열을 가진 객체를 속성으로 사용하거나 배열 배열을 사용하는 것이 더 편리합니다. –

답변

0

당신이 많은 변수를 제거 다른 배열에 정장 이름을 저장하는 경우; 여기

function CardDeck() { 
    var Cd = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]; 
    var Result = []; 
    var Dk = document.getElementById("Deck Count").value; 

    // Put the suit names into a new array 
    var suitNames = [" of Spades", " of Hearts", " of Clubs", " of Diamonds"]; 
    if (Dk == "5") { 
    suitNames.push(" of Stars"); 
    } else if (Dk == "6") { 
    suitNames.push(" of Rackets"); 
    suitNames.push(" of Wheels"); 
    } 

    // Create all suit stacks as an array of arrays 
    var suits = []; 
    for (var i = 0; i < Cd.length; i++) { 
    for(var j = 0; j < suitNames.length; j++) { 
     if(i===0) suits.push([]); 
     suits[j].push(Cd[i] + suitNames[j]); 
    } 
    } 

    // Combine all cards into a single array 
    var P = Array.prototype.concat.apply([], suits); 

    // Shuffle the deck 
    for (i = 0; i < P.length; i++) { 
    var Q = Choose(P); 
    R = P.indexOf(Q); 
    Result[i] = (i + 1) + ": " + Q; 
    P = P.slice(0, R).concat(P.slice(R + 1)); 
    } 

    document.getElementById("Cards").innerHTML = Result.join("\n"); 

} 

을 실행중인 샘플입니다 : 다음 한 번에 Result에 그들 모두를 얻을 수 concatapply를 사용 https://jsfiddle.net/b4rf3ne2/

당신이 찾고있는 무슨에 그 가까운가요?

+1

예, 한 번에 많은 수트를 만들 수 있으므로 완벽합니다. 고맙습니다. –

1

(이 기본 JS에 지어진로 더 라이브러리)

또한, 기본 JS에서 더 긴 기간에 더 나은 RNG를 얻을 수있는 방법이있다 : var H=[], S=[], D=[], C=[]; 하지만 그렇지 않으면 가지고있는 것보다 간결하게하기가 어렵습니다.

0

처럼 당신이 뭔가를 할 수 : 하나의 배열 루트를 선언하고 for 루프에서 하위 어레이를 많이 선언

var arrays = []; 
var nmbOfAr = 20; 
for(int i = 0; i < nmbOfAr; i++){ 
    arrays[i] = []; 
} 
0

ES6을 사용하면 한계가 개선 될 수 있다고 생각합니다.

let {S, H, C, D} = Cd.reduce((state, cardType, idx) => { 
    state.S.push(cardType + ' of Spades'); 
    state.H.push(cardType + ' of Hearts'); 
    state.C.push(cardType + ' of Clubs'); 
    state.C.push(cardType + ' of Diamonds'); 
    return state; 
}, { 
    S: [], 
    H: [], 
    C: [], 
    D: [], 
}); 
관련 문제