Javascript - уменьшить метод над массивом. Суммируйте баллы карт вместе, чтобы получить общее количество

1

В настоящее время это консольное ведение журнала:

14
16
[ { suit: '', value: 'J', points: 10 },
  { suit: '', value: 4, points: 4 } ]
[ { suit: '', value: 'K', points: 10 },
  { suit: '', value: 6, points: 6 },
  { suit: '', value: 'J', points: 10 } ]
0[object Object][object Object][object Object]

Меня беспокоят только последние 3 объекта. Точки 10, 6, 10, которые должны дать мне 26.

dealerHand и playerHand - это оба массива, которые с самого начала вставляют в них две карты. Массив dealerHand будет продолжать "ударять" или добавлять карты, если общее значение точки меньше 17.

После добавления третьей карты он регистрирует 0 и возвращает массивы объектов.

Я считаю, что метод reduce - это хороший способ получить общее количество в массиве, но я не уверен, что мне не хватает.

///////////////////////////////////////////////
                CODE
///////////////////////////////////////////////
const dealRandomCard = () => {
     return deckOfCards.splice(Math.floor(Math.random() * 
            deckOfCards.length), 1)[0];
}

// console.log(dealRandomCard());

//////////////////////////////////////////////////////////////
//                DEAL 2 CARDS TO EACH SIDE                 //
//////////////////////////////////////////////////////////////
  for (let i = 0; i < 2; i++) {
     playerHand.push(dealRandomCard());
     dealerHand.push(dealRandomCard());
  }

Метод dealRandomCard просто возвращает одну случайную карту из массива, которую я определил как deckOfCards с соответствующим маститом, значением и точками, которые можно добавить вместе, чтобы определить победителя.

let playerPoints = 0,
    dealerPoints = 0;

for (let { points } of playerHand) {
    playerPoints += points;
}

for (let { points } of dealerHand) {
    dealerPoints += points
}
    console.log(playerPoints);
    console.log(dealerPoints);

 /////////////////////////////////////////////////////////////

let totalPoints;

if (dealerPoints < 17) {
    dealerHand.push(dealRandomCard());

    totalPoints += points

} else {

    return

}

let totalDealerPoints = 0;

// for (let card of dealerHand) {

 totalDealerPoints += points;

 totalDealerPoints  = dealerHand.reduce((total , amount) => total + 
 amount, 0);
 // }

// return totalDealerPoints
console.log(playerHand);
console.log(dealerHand);
console.log(totalDealerPoints);

/////////ПЕРЕСМОТРЕННЫЙ С ПРАВИЛЬНЫМ РАБОЧИМ КОДОМ /////////////

 let totalPoints = 0;

 if (dealerPoints < 17) {
    dealerHand.push(dealRandomCard());

   totalPoints += points

 } else {

  return

 }



 // for (let card of dealerHand) {

 totalPoints += points;

 totalPoints  = dealerHand.reduce((total , card) => total + 
 card.points, 0);
  • 0
    Что такое dealRandomCard ?
  • 0
    Во второй половине вы используете переменную points которая не определена (вы используете локальную версию points в циклах for).
Показать ещё 1 комментарий
Теги:

1 ответ

2
Лучший ответ

Кажется, что код отсутствует, потому что в строках вроде этого:

    dealerHand.push(dealRandomCard());
    totalPoints += points

points не определены нигде в текущей области, а totalPoints не инициализируются до нуля. Но поскольку эти ценности на самом деле не используются, я не уверен, что сказать.

Что касается reduce, вы получите карточку с каждым проходом, поэтому вам нужно добавить card.points:

let dealerHand = [ 
  { suit: '', value: 'K', points: 10 },
  { suit: '', value: 6, points: 6 },
  { suit: '', value: 'J', points: 10 } ]

let totalPoints = dealerHand.reduce((total, card) => total + card.points, 0)
console.log(totalPoints)
  • 0
    Ценить это. Моя ошибка, поскольку у меня были точки, определенные глобально, а не показанные в коде. Также я инициализировал totalPoints к 0 и добавил card.points к аргументам

Ещё вопросы

Сообщество Overcoder
Наверх
Меню