0

我正在学习关于数组的 codecademy.com 课程。我应该编写嵌套循环来将每张花色的每张卡片放在一个数组中的一副卡片中。

我真的把这搞砸了。这是我尝试过的一种不起作用的组合。唯一表明我有点接近的迹象是它返回“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

每次迭代,都会将一个新数组添加到甲板上,如下所示:

卡片数组:[ [ 等级 [j] ] ]

当 cardArray[0][0] 被设置时,它会将 cardArray[0] 覆盖为一个索引为 0 且包含 rank[j] 的数组。相反,将 cardArray[0] 设置为花色,并将 cardArray[1] 设置为等级。

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 回答