JavaScript从数组中删除值

时间:2013-07-27 09:34:05

标签: javascript arrays

我是一个相对较新的JavaScript,我构建了一个小应用程序,从一组52张卡中随机生成一张卡片(我将所有可能性存储在一个数组中)。但我想确保同一张卡无法生成两次。我无法找到办法。

var cardType = ["A♠","2♠","3♠","4♠","5♠","6♠","7♠","8♠","9♠","10♠","J♠","Q♠","K♠"];

function generateCard()
{
var card = cardType[Math.round(Math.random() * (cardType.length - 1))];
}

spade符号实际上并不在我的数组中,我只是将它放入可见性中。

4 个答案:

答案 0 :(得分:3)

跟踪已生成的卡片,检查新生成的卡片是否已存在,如果已存在,请生成新卡片:

var already_generated = [];
var cardType = ["A♠","2♠","3♠","4♠","5♠"...];

function generateCard() {
    var card = cardType[Math.round(Math.random() * (cardType.length - 1))];

    if ( already_generated.indexOf(card) == -1 ) {
        already_generated.push(card);
    }else{
        if (already_generated.length < cardType.length) generateCard();
    }
}

较早的浏览器需要Array.indexOf的垫片,可以在MDN

找到

作为旁注,原始数组可以被切片,但这似乎更容易,除非您出于某种原因来更改原始数组!

答案 1 :(得分:3)

预先将阵列洗牌,然后从阵列中弹出一张卡

var cardType = ["A♠","2♠","3♠","4♠","5♠","6♠","7♠","8♠","9♠","10♠","J♠","Q♠","K♠"];

//shuffles array
cardType.sort(function() { return 0.5 - Math.random() });

function generateCard()
{    
    return cardType.pop();
}

当你得到undefined时,这意味着你得到了所有的卡

答案 2 :(得分:0)

我会:

  • 制作您订购的一组卡片(即“包装”)
  • 使用effective shuffling algorithm从“pack”
  • 制作“套牌”
  • 使用deck.pop()从该套牌中取出连续的牌

在开发应用程序时,使用抽象来表示一副牌可能会很有用。现在看起来有点矫枉过正,但从长远来看它是值得的。如果做得恰当,它也应该可以在其他项目中重复使用。

答案 3 :(得分:-2)

使用delete关键字。

样品:

var x = [1,2,3];
delete x[1]; // delete element '2'
for (i in x) { 
  console.log(x[i]); // outputs 1, 3
}