[英]Javascript - Loop through object with array property
我正在嘗試使用JS開發一個簡單的BlackJack游戲。 這是我的一些代碼:
function card(suit, face) {
this.suit = suit;
this.face = face;
switch (face) {
case "A":
this.faceValue = 11;
break;
case "J":
case "Q":
case "K":
this.faceValue = 10;
break;
default:
this.faceValue = parseInt(face);
break;
}
};
const player = {
cards: [],
handValue: 0
}
const dealOneCardToPlayer = () => {
tempCard = deck.cards.splice(0, 1);
player.cards.push(tempCard);
player.handValue = countHandValue(player.cards);
}
我受困於countHandValue方法,無法獲得玩家對象的Cards的faceValue。 我嘗試了幾種類型的for循環,但仍然沒有成功。 一旦獲得faceValue,就可以將其匯總並分配給handValue屬性。
const countHandValue = (cardsOnHand) => {
for (const key of cardsOnHand) {
console.log(key.faceValue);
}
for (const key in cardsOnHand) {
console.log(key.faceValue);
}
}
[代碼編輯]我搜索並找到了此代碼,可以檢索我的faceValue屬性,但我相信還有很多額外的代碼:
const countHandValue = (cardsOnHand) => {
let sum = 0;
for (var key in cardsOnHand) {
var arr = cardsOnHand[key];
for (var i = 0; i < arr.length; i++) {
var obj = arr[i];
for (var prop in obj) {
if (prop === "faceValue") {
console.log(prop + " = " + obj[prop]);
sum = sum + obj[prop];
}
}
}
}
return sum;
}
您可以只使用reduce
:
const coundHandValue = cards => cards.reduce((acc, { faceValue }) => acc + faceValue, 0);
不要認為A
可以得分為1 或 11。該程序向您展示了如何處理-
const add = (x = 0, y = 0) => x + y const sum = (a = []) => a .reduce (add, 0) const scoreCard = (face = "") => face === "A" ? [ 11, 1 ] : (face === "K") || (face === "Q") || (face === "J") ? [ 10 ] : [ Number (face) ] const allScores = ([ face = "", ...more ]) => face === "" ? [ scoreCard (face) ] : allScores (more) .flatMap ( hand => scoreCard (face) .map (v => [ v, ...hand ]) ) const scoreHand = (...hand) => { const [ best = "Bust" ] = allScores (hand) .map (sum) .filter (score => score <= 21) if (best === 21) return "Blackjack!" else return String (best) } console .log ( scoreHand ("A", "K") // Blackjack! , scoreHand ("A", "A", "K") // 12 , scoreHand ("A", "A", "K", "7") // 19 , scoreHand ("J", "4", "K") // Bust , scoreHand ("A", "A", "A", "A", "K", "7") // Blackjack! )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.