2017-11-18 11 views
0

私はゲーム用のカードデッキを生成しようとしています。 配列を印刷するときに配列がどうなってしまうのですか? 予想される出力:配列がオーダーされていません

[ 
     {number: 1, suite: "Hearts", points: 1}, 
     {number: 2, suite: "Hearts", points: 2}, 
     ... 
    ] 

私はそれをプリントアウトしたときに、私が得る結果は次のとおりです。

[ 
    {number: 2, suite: "Hearts", points: 2}, 
    {number: 4, suite: "Hearts", points: 4}, 
    {number: 13, suite: "Clubs", points: 10}, 
    {number: 5, suite: "Diamonds", points: 5}, 
    {number: 4, suite: "Spades", points: 4}, 
    {number: 13, suite: "Diamonds", points: 10}, 
    ... 
] 

私はなぜこれがわからないんだけど...どのように私は順序を修正できますか?

オブジェクトの配列は一般的に順序が合っていませんか?

function generateCards() { 
 
    deck = [] 
 
    let i = 1; 
 
    let j = 1; 
 
    for (j = 1; j < 5; j++) { 
 
    let suite = "" 
 
    switch (j) { 
 
     case (1): 
 
     suite = "Hearts" 
 
     break; 
 
     case (2): 
 
     suite = "Diamonds" 
 
     break; 
 
     case (3): 
 
     suite = "Clubs" 
 
     break; 
 
     case (4): 
 
     suite = "Spades" 
 
     break; 
 
    } 
 
    for (i = 1; i < 14; i++) { 
 
     switch (i) { 
 
     case (11): 
 
      points = 10; 
 
      break; 
 
     case (12): 
 
      points = 10; 
 
      break; 
 
     case (13): 
 
      points = 10; 
 
      break; 
 
     default: 
 
      points = i; 
 
      break; 
 
     } 
 
     card = { 
 
     "number": i, 
 
     "suite": suite, 
 
     "points": points 
 
     } 
 
     deck.push(card) 
 
    } 
 
    } 
 
    console.log(deck) 
 
    return deck; 
 
} 
 

 

 
generateCards();

+1

部分が順番にではないでしょうか? – Ryan

+1

この場合の注文とはどういう意味ですか? –

+0

@Ryanが私の質問を編集しました! – MarkJ

答えて

1

これは(私は再現することはできません)順序の問題を修正しませんが、かなりあなたのコードが短くなります。

function generateCards() { 
 
    const suites = ['Hearts', 'Diamonds', 'Clubs', 'Spades']; 
 
    const deck = [] 
 

 
    for (let j = 0; j < 4; j++) { 
 
    for (let i = 1; i < 14; i++) { 
 
     deck.push({ 
 
     number: i, 
 
     suite: suites[j], 
 
     points: i >= 11 ? 10 : i 
 
     }); 
 
    } 
 
    } 
 

 
    return deck; 
 
} 
 

 

 
console.log(generateCards());

そして、あなたは、単一のループにそれでもコンパクトにすることができます:

function generateCards() { 
 
    const suites = ['Hearts', 'Diamonds', 'Clubs', 'Spades']; 
 
    const deck = [] 
 

 
    for (let i = 0; i < 52; i++) { 
 
    const number = i % 13 + 1; 
 
    
 
    deck.push({ 
 
     number, 
 
     suite: suites[i/13 | 0], // divide by 13 and round down 
 
     points: number >= 11 ? 10 : number 
 
    }); 
 
    } 
 

 
    return deck; 
 
} 
 

 

 
console.log(generateCards());

+0

私はこのコードがはるかに良いのが好きです。そして、正しい順序で配列を生成します。 – Intervalia

関連する問題