[英]How to fill an array using class instantiation
我正在學習 JavaScript。 我在網上找到了這個問題並嘗試這樣做。
創建 2 個類“Card”和“Deck”,它們將代表 52 張撲克牌的標准牌組。 例如黑桃 A 或紅桃 5。
卡 class 接受 2 個參數“suit”和“rank”並將它們存儲為公共屬性。 甲板 class 有一組固定的花色[S, C, D, H]。 Deck 有一個常數數組[2,3,4,5,6,7,8,9,10,J,Q,K,A]。 Deck 有一個空的“cards”數組
在 Deck 實例化時,使用“Card”class 用所有 52 張標准撲克牌填充卡片數組
我通過循環陣列僅使用Deck
class 做到了這一點。 但是如何使用單獨的 class 來做到這一點?
class Deck { suits = ["S", "C", "D", "H"]; ranks = [2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K", "A"]; constructor(suits, ranks) { this.suits = suits; this.ranks = ranks; this.cards = []; } getAllCards() { var cards = new Array(); for (var i = 0; i < suits.length; i++) { for (var x = 0; x < cards.length; x++) { var card = { Value: cards[x], Suit: suits[i] }; cards.push(card); } } } return cards; }
您可以使用Card
class 而不是 object 來表示每張卡片。
class Card { constructor(suit, rank) { this.suit = suit; this.rank = rank; } } class Deck { static suits = ["S", "C", "D", "H"]; static ranks = [2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K", "A"]; constructor() { this.cards = this.getAllCards(); } getAllCards() { var cards = []; for (var i = 0; i < Deck.suits.length; i++) { for (var j = 0; j < Deck.ranks.length; j++) { var card = new Card(Deck.suits[i], Deck.ranks[j]); cards.push(card); } } return cards; } } console.log(new Deck().cards);
正如Scott Sauyet所建議的, flatMap
和map
操作也可以應用於更簡潔的代碼。
class Card { constructor(suit, rank) { this.suit = suit; this.rank = rank; } } class Deck { static suits = ["S", "C", "D", "H"]; static ranks = [2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K", "A"]; constructor() { this.cards = Deck.suits.flatMap(suit => Deck.ranks.map(rank => new Card(suit, rank))); } } console.log(new Deck().cards);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.