javascript 无法拼接对象数组

bsxbgnwa  于 2022-11-20  发布在  Java
关注(0)|答案(4)|浏览(151)

我可以对我的卡片组(对象数组)进行洗牌,但现在我试图取出/移除前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)
        }
f1tvaqid

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是声明变量的新方法。也许你的教程已经过时了

yks3o0rb

yks3o0rb2#

您尝试在 shuffledCards 上使用Array方法,但在代码中,每次循环运行时,您都要再次定义 shuffledCards,并将对象作为值赋给它

var shuffledCards = starterDeck[i];
  • starterDeck* 是一个数组,因此如果执行 starterDeck[i],则会获得该位置的值(对象)

尝试在循环外定义 starterDeck,在循环内推送值,然后在循环外使用 splice(0,25)
这样您就可以删除Array中从0到25的位置。

2eafrhcq

2eafrhcq3#

从代码中可以看出,你在一个对象上使用了splice方法,这就是为什么你会得到这个错误的原因。由于splice是一个在数组上使用的方法,你可以通过在应用splice之前先把所有的洗牌卡添加到数组中来解决这个问题。
类似下面的代码应该可以工作。

const allShuffledCards = []
    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)
    
                allShuffledCards.push(shuffledCards);
                console.log(player1Deck)
            }
   allShuffledCards.splice(0, 25)
   console.log(allShuffledCards)
t30tvxxf

t30tvxxf4#

解决方案

const 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
}, ];

let player1Deck = [];
for (let i = 0; i < 52; i++) {
    const randomIndex = Math.floor(Math.random() * 52);
    const shuffledCards = starterDeck[i];
    starterDeck[i] = starterDeck[randomIndex];
    starterDeck[randomIndex] = shuffledCards;
    player1Deck = starterDeck.slice(25);
}

console.log(player1Deck)

分析

您试图从shuffledCards切片,但这是交换逻辑的对象。相反,您应该从starterDeck获取卡片。

player1Deck = starterDeck.slice(25); // Slice doesn't manipulate new array

还更新了代码,添加了新的ES6+功能。

相关问题