簡體   English   中英

如何使用 class 實例化填充數組

[英]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所建議的, flatMapmap操作也可以應用於更簡潔的代碼。

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM