尝试使用For Loop创建一副纸牌

时间:2019-05-13 16:51:06

标签: javascript

我正在尝试使用2个数组创建一副纸牌。一个数组是西服,另一个数组是值。我的想法是使用for循环遍历数组以创建52张卡片组。但是,我似乎无法正确理解语法。

我尝试使用forEach方法。

var deck = [];
var suits = ["diamonds", "spades", "hearts", "clubs"];
var values = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];

suits.forEach(function(suits) {
  deck.push(suits);
  deck.push(values);
});

console.log(deck)

4 个答案:

答案 0 :(得分:4)

您需要两个循环,一个在西装上,一个在面部值上,例如

var deck = [];
var suits = ["diamonds", "spades", "hearts", "clubs"];
var values = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];

suits.forEach(function(suit) {
  values.forEach(function(value) {
    deck.push(`${value} of ${suit}`);
  });
});

console.log(deck);

或者,您可以使用flatMap

var suits = ["diamonds", "spades", "hearts", "clubs"];
var values = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
var deck = suits.flatMap(suit => values.map(value => `${value} of ${suit}`));

console.log(deck);

请注意:某些较旧的浏览器不支持flatMap,因此您可能需要使用polyfill。

仅出于演示目的,您还可以使用Ramdamapxprod

var suits = ["diamonds", "spades", "hearts", "clubs"];
var values = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
var deck = R.map(([suit, value]) => `${value} of ${suit}`, R.xprod(suits, values));

console.log(deck);
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>

答案 1 :(得分:1)

尝试

suits.forEach(s=> values.forEach(v=> deck.push(v+' of '+s)));

var deck = [];
var suits = ["diamonds", "spades", "hearts", "clubs"];
var values = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];

suits.forEach(s=> values.forEach(v=> deck.push(v+' of '+s)));

console.log(deck);

答案 2 :(得分:0)

var deck = new Array();
var suits = ["diamonds", "spades", "hearts", "clubs"];
var values = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];


function makeDeck()
{

    for(var i = 0; i < suits.length; i++)
    {
        for(var x = 0; x < values.length; x++)
        {
            var card = {Value: values[x], Suit: suits[i]};
            deck.push(card);
        }
    }

    return deck;
}

makeDeck();

答案 3 :(得分:0)

我建议这样的事情:

var deck = [];
var suits = ["diamonds", "spades", "hearts", "clubs"];
var values = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];

suits.forEach(function(suit) {
  values.forEach(function(value) {
    deck.push([suit, value]);
  });
});

console.log(deck)