0

私は配列に関するcodecademy.comのレッスンに取り組んでいます。私はネストされたループを書いて、すべてのスーツの各カードを配列のカードのデッキに入れることになっています。

私は本当にこれを台無しにしています。これは私が試した組み合わせの1つで、機能しません。私が近いことを示しているのは、「52」が返されるため、少なくとも52個のオブジェクトが配列に入っていることだけです。誰かが私が間違っていることを指摘できますか?

   //array 1: the suits
var suits = ["clubs","hearts","diamonds","spades"];

//array 2: the ranks
var ranks = [2,3,4,5,6,7,8,9,10,"J","Q","K","A"];

//using for loops, modify the "deck" array so that it becomes a 
//two-dimensional array that stores every card in the deck; 
//e.g. [1, "clubs"], [2, "clubs"],etc...["A", "spades"]
var deck = [];

for(i = 0; i < suits.length; i++){
    for (j = 0; j < ranks.length; j++){
        var cardArray = [];
        cardArray[0] = suits[i];
        cardArray[0][0] = ranks[j];
        deck.push(cardArray);
    }
}
4

2 に答える 2

2

反復ごとに、次のような新しい配列がデッキに追加されます。

cardArray:[[ranks [j]]]

cardArray [0] [0]を設定すると、cardArray[0]がranks[j]を含むインデックス0の配列として上書きされます。代わりに、cardArray [0]をsuitsに設定し、cardArray[1]をranksに設定します。

cardArray[0] = suits[i];
cardArray[1] = ranks[j];
deck.push(cardArray);

これにより、次のようになります。

for (var i = 0; i < suits.length; i++){
    for (var j = 0; j < ranks.length; j++){
        var cardArray = [];
        cardArray[0] = suits[i];
        cardArray[1] = ranks[j];
        deck.push(cardArray);
    }
}
于 2012-09-01T19:46:06.820 に答える
1

varループカウンターには宣言を使用する必要があります。問題のあるコードは

cardArray[0] = suits[i];
cardArray[0][0] = ranks[j];

これは次のようなことをします

var foo = "clubs";
foo[0] = "J";

これは明らかに機能しません。あなたが欲しいのは

var deck = [];

for(var i = 0; i < suits.length; i++){
    var cardArray = [];
    for (j = 0; j < ranks.length; j++){
        var twoCards = [];
        twoCards[0] = suits[i];
        twoCards[1] = ranks[j];
        cardArray.push(twoCards);
 //     // or the same thing as this loop body, shorter:
 //     cardArray.push([suits[i], ranks[j]]);
    }
    deck.push(cardArray);
}
于 2012-09-01T19:47:33.333 に答える