Does you know why "card2" randomly puts a object into the array? It should always put a object into the array.
const cards=[
{
card: '🂡',
value: '1'
},
{
card: '🂢',
value: '2'
},
{
card: '🂣',
value: '3'
},
{
card: '🂤',
value: '4'
},
{
card: '🂥',
value: '5'
},
{
card: '🂦',
value: '6'
},
{
card: '🂧',
value: '7'
},
{
card: '🂨',
value: '8'
},
{
card: '🂩',
value: '9'
},
{
card: '🂪',
value: '10'
}
];
var deck = [];
shuffleDeck = () =>{
var tempDeck = [...cards];
var card1 = [0];
var card2 = [0];
while(0 !== tempDeck.length) {
var randomIndex = Math.floor(Math.random() * tempDeck.length);
card1 = tempDeck.splice(randomIndex, 1);
card2 = tempDeck.splice(randomIndex, 1);
deck = [...card1, ...card2];
}
}
shuffleDeck();
for(var i = 0; i <= deck.length; i++){
console.log(deck[i]);
}
You have two things to fix in your code:
In the while
you set randomIndex
just once and use it for botth, card1
and card2
, but when you set card1
it uses splice
and remove that index, so card2 is undefined.
FIX: set randomIndex
once again after setting card1
In the for
loop, you need i < deck.length
and not i <= deck.length
, this will avoid an undefined value, because when i
equals to deck.length
it would be 2, and deck hasn't index 2, it has only indexes 0 and 1.
const cards = [{card: '🂡', value: '1'}, {card: '🂢', value: '2'}, {card: '🂣', value: '3'}, {card: '🂤', value: '4'}, {card: '🂥', value: '5'}, {card: '🂦', value: '6'}, {card: '🂧', value: '7'}, {card: '🂨', value: '8'}, {card: '🂩', value: '9'}, {card: '🂪', value: '10'}];
var deck = [];
shuffleDeck = () =>{
var tempDeck = [...cards];
var card1 = [0];
var card2 = [0];
while(0 !== tempDeck.length) {
var randomIndex = Math.floor(Math.random() * tempDeck.length);
card1 = tempDeck.splice(randomIndex, 1);
randomIndex = Math.floor(Math.random() * tempDeck.length);
card2 = tempDeck.splice(randomIndex, 1);
deck = [...card1, ...card2];
}
}
shuffleDeck();
for(var i = 0; i < deck.length; i++){
console.log(deck[i]);
}