Search code examples
javascriptarraysblackjack

How to push an object into array and then call parts of object in that array


I'm making a blackjack game in Javascript which requires making objects for each card so that multiple cards equal 10. I'm then calling a random number and pushing the corresponding card into the array dealerArr, my problem is when I want to add the values of those objects in the array together, It doesn't seem to be possible, here's the code.

var dealerArr = [];
var playerArr = [];
var dealerTotal = 0;
var playerTotal = 0;
var two = {
  value: 2
}
var three = {
  value: 3
}
var four = {
  value: 4
}
var five = {
  value: 5
}
var six = {
  value: 6
}
var seven = {
  value: 7
}
var eight = {
  value: 8
}
var nine = {
  value: 9
}
var ten = {
  value: 10
}
var jack = {
  value: 10
}
var queen = {
  value: 10
}
var king = {
  value: 10
}
var ace = {
  value: 11
}


function calcTotal(arr) {
  var sum = 0;
  for (var object of arr) {
    sum += object.value;
  }
  return sum;
}

while (calcTotal(dealerArr) < 17) {
  var randomCard = (Math.floor(Math.random() * 13) + 1)
  if (randomCard = 1) {
    dealerArr.push(two);
  } else if (randomCard = 2) {
    dealerArr.push(three);
  } else if (randomCard = 3) {
    dealerArr.push(four);
  } else if (randomCard = 4) {
    dealerArr.push(five);
  } else if (randomCard = 5) {
    dealerArr.push(six);
  } else if (randomCard = 6) {
    dealerArr.push(seven);
  } else if (randomCard = 7) {
    dealerArr.push(eight);
  } else if (randomCard = 8) {
    dealerArr.push(nine);
  } else if (randomCard = 9) {
    dealerArr.push(ten);
  } else if (randomCard = 10) {
    dealerArr.push(jack);
  } else if (randomCard = 11) {
    dealerArr.push(queen);
  } else if (randomCard = 12) {
    dealerArr.push(king);
  } else if (randomCard = 13) {
    dealerArr.push(ace);
  }
  console.log(dealerTotal)
}


Solution

  • The problem is that you used = instead of == in if statements.

    Single equals in JS (and many more languages) does an assignment, while double and triple equals do the comparision.

    So use this format instead:

    var dealerArr = [];
    var playerArr = [];
    var dealerTotal = 0;
    var playerTotal = 0;
    var two = {
      value: 2
    }
    var three = {
      value: 3
    }
    var four = {
      value: 4
    }
    var five = {
      value: 5
    }
    var six = {
      value: 6
    }
    var seven = {
      value: 7
    }
    var eight = {
      value: 8
    }
    var nine = {
      value: 9
    }
    var ten = {
      value: 10
    }
    var jack = {
      value: 10
    }
    var queen = {
      value: 10
    }
    var king = {
      value: 10
    }
    var ace = {
      value: 11
    }
    
    
    function calcTotal(arr) {
      var sum = 0;
      for (var object of arr) {
        sum += object.value;
      }
      return sum;
    }
    
    while (calcTotal(dealerArr) < 17) {
      var randomCard = (Math.floor(Math.random() * 13) + 1)
      if (randomCard == 1) {
        dealerArr.push(two);
      } else if (randomCard == 2) {
        dealerArr.push(three);
      } else if (randomCard == 3) {
        dealerArr.push(four);
      } else if (randomCard == 4) {
        dealerArr.push(five);
      } else if (randomCard == 5) {
        dealerArr.push(six);
      } else if (randomCard == 6) {
        dealerArr.push(seven);
      } else if (randomCard == 7) {
        dealerArr.push(eight);
      } else if (randomCard == 8) {
        dealerArr.push(nine);
      } else if (randomCard == 9) {
        dealerArr.push(ten);
      } else if (randomCard == 10) {
        dealerArr.push(jack);
      } else if (randomCard == 11) {
        dealerArr.push(queen);
      } else if (randomCard == 12) {
        dealerArr.push(king);
      } else if (randomCard == 13) {
        dealerArr.push(ace);
      }
      console.log(dealerTotal)
    }