我可以对我的卡片组(对象数组)进行洗牌,但现在我试图取出/移除前25张卡片(对象)并将它们放入自己的存储数组中。然而,当我试图引用新的卡片组var player 1Deck = shuffledCards.splice(25)时,代码返回undefined;返回的不是一个函数。有没有办法从我创建的这个新的洗牌数组中删除前25张牌/对象?
//Deck with ranks
var starterDeck = [
{"img": '2_of_clubs.png',"rank": 1},{"img": '3_of_clubs.png',"rank": 2},{"img": '4_of_clubs.png',"rank": 3},{"img": '5_of_clubs.png',"rank": 4},{"img": '6_of_clubs.png',"rank": 5},{"img": '7_of_clubs.png',"rank": 6},{"img": '8_of_clubs.png',"rank": 7},{"img": '9_of_clubs.png',"rank": 8},{"img": '10_of_clubs.png',"rank": 9},{"img": 'jack_of_clubs.png',"rank": 10},{"img": 'queen_of_clubs.png',"rank": 11},{"img": 'king_of_clubs.png',"rank": 12},{"img": 'ace_of_clubs.png',"rank": 13}, {"img": '2_of_diamonds.png',"rank": 1},{"img": '3_of_diamonds.png',"rank": 2},{"img": '4_of_diamonds.png',"rank": 3},{"img": '5_of_diamonds.png',"rank": 4},{"img": '6_of_diamonds.png',"rank": 5},{"img": '7_of_diamonds.png',"rank": 6},{"img": '8_of_diamonds.png',"rank": 7},{"img": '9_of_diamonds.png',"rank": 8},{"img": '10_of_diamonds.png',"rank": 9},{"img": 'jack_of_diamonds.png',"rank": 10},{"img": 'queen_of_diamonds.png',"rank": 11},{"img": 'king_of_diamonds.png',"rank": 12},{"img": 'ace_of_diamonds.png',"rank": 13}, {"img": '2_of_hearts.png',"rank": 1},{"img": '3_of_hearts.png',"rank": 2},{"img": '4_of_hearts.png',"rank": 3},{"img": '5_of_hearts.png',"rank": 4},{"img": '6_of_hearts.png',"rank": 5},{"img": '7_of_hearts.png',"rank": 6},{"img": '8_of_hearts.png',"rank": 7},{"img": '9_of_hearts.png',"rank": 8},{"img": '10_of_hearts.png',"rank": 9},{"img": 'jack_of_hearts.png',"rank": 10},{"img": 'queen_of_hearts.png',"rank": 11},{"img": 'king_of_hearts.png',"rank": 12},{"img": 'ace_of_hearts.png',"rank": 13}, {"img": '2_of_spades.png',"rank": 1},{"img": '3_of_spades.png',"rank": 2},{"img": '4_of_spades.png',"rank": 3},{"img": '5_of_spades.png',"rank": 4},{"img": '6_of_spades.png',"rank": 5},{"img": '7_of_spades.png',"rank": 6},{"img": '8_of_spades.png',"rank": 7},{"img": '9_of_spades.png',"rank": 8},{"img": '10_of_spades.png',"rank": 9},{"img": 'jack_of_spades.png',"rank": 10},{"img": 'queen_of_spades.png',"rank": 11},{"img": 'king_of_spades.png',"rank": 12},{"img": 'ace_of_spades.png',"rank": 13},
]
for(var i=0;i<52; i++) {
// We are taking our tempCard and placing it in the random position (randomIndex)
var shuffledCards = starterDeck[i];
var randomIndex = Math.floor(Math.random() * 52);
starterDeck[i] = starterDeck[randomIndex]
starterDeck[randomIndex] = shuffledCards;
// let newDeck = [shuffledCards]
console.log(shuffledCards)
var player1Deck = shuffledCards.splice(25);
console.log(player1Deck)
}
4条答案
按热度按时间f1tvaqid1#
编接点的工作原理如下:拼接(objectIndex,steps)。例如在数组[2,3,4,5,6]中,如果我做arr.splice(2,2)它将删除5和6。Splice不会返回任何内容,因为它会从数组中的位置删除项(就像forEach函数与返回新数组的.map相比)。如果要拆分卡片组(前26项),使用.slice代替=〉slice(0,26)或更好的slice(0,arr.length / 2)我看你是新手,所以请不要使用vars,让& const是声明变量的新方法。也许你的教程已经过时了
yks3o0rb2#
您尝试在 shuffledCards 上使用Array方法,但在代码中,每次循环运行时,您都要再次定义 shuffledCards,并将对象作为值赋给它
尝试在循环外定义 starterDeck,在循环内推送值,然后在循环外使用 splice(0,25)
这样您就可以删除Array中从0到25的位置。
2eafrhcq3#
从代码中可以看出,你在一个对象上使用了splice方法,这就是为什么你会得到这个错误的原因。由于splice是一个在数组上使用的方法,你可以通过在应用splice之前先把所有的洗牌卡添加到数组中来解决这个问题。
类似下面的代码应该可以工作。
t30tvxxf4#
解决方案
分析
您试图从
shuffledCards
切片,但这是交换逻辑的对象。相反,您应该从starterDeck
获取卡片。还更新了代码,添加了新的ES6+功能。