【问题标题】:Adding a random class to element from an array that duplicates using jQuery将随机类添加到使用 jQuery 重复的数组中的元素
【发布时间】:2013-09-27 03:16:47
【问题描述】:

我正在创建一个匹配游戏,并尝试从数组中添加一个类来匹配。 下面的代码创建了我需要的类,然后将它们随机化。

我的问题在于 randomizeDeck 函数。我试图将每个类添加到指定元素两次。当我 console.log 代码时,类被添加到前六个元素而不是后六个元素中,我需要这样做,以便在我正在创建的匹配游戏中匹配这些类。

var cardDeck = new Array();

function createDeck() {
    for (i = 1; i <= 6; i++) {
        cardDeck.push("card-" + i);
    }
}
createDeck();

var randDeck = cardDeck.sort(randOrd);

function randomizeDeck() {
    card.each(function(i){
        $(this).addClass(randDeck[i]);
    });
}
randomizeDeck();

【问题讨论】:

  • “card.each”中的卡片是什么?这个变量有什么?
  • 变量card是一个带有class card的div。该 div 被复制了 12 次。
  • andi 的解决方案可能是您的最佳选择。

标签: javascript jquery arrays random


【解决方案1】:

我认为您的 createDeck 函数需要创建 12 个类而不是 6 个。只需将每个类推两次:

function createDeck() {
    for (i = 1; i <= 6; i++) {
        cardDeck.push("card-" + i);
        cardDeck.push("card-" + i);
    }
}

然后您将拥有一个包含 12 个类别的数组(6 个独特类别中的每个类别 2 个),它们将被随机分配到 12 张卡片中。

【讨论】:

  • 不要忘记在她的初始数组上发生的随机排序。
  • @BumbleB2na - 这种排序可以正常工作。您发现问题了吗?
  • 实际上没有......现在你提到它会比我的解决方案更好地混合它们
【解决方案2】:

我建议使用单独的变量来跟踪索引,而不是 each 索引。一旦你完成了一次包,最好再次洗牌,这样第二次的顺序就不同了。 YMMV。

function sortCards(randOrd) {
  randDeck = cardDeck.sort(randOrd);
}

function randomizeDeck() {
  var count = 0;
  cards.each(function(i) {
    if (i === 6) { count = 0; sortCards(randOrd); }
    $(this).addClass(randDeck[count]);
    count++;
  });
}

【讨论】:

    【解决方案3】:

    您的 randomizeDeck() 函数可以重写为使用相同的类名数组两次:

    function randomizeDeck() {
        card.each(function(i){
            if(i < 6)
                $(this).addClass(randDeck[i])
            else
                $(this).addClass(randDeck[i-6]);
        });
    }
    

    注意:我会将变量card 重写为$cards,以便您知道它是一个jQuery 对象,在本例中是它们的集合。否则,很难将其与任何其他 javascript var 区分开来。

    【讨论】:

    • 没错,我正在尝试添加一个为匹配目的而重复的类。例如与 card-1 等匹配的 card-1。
    • 那么您将超出数组的范围
    • 关于如何将相同的数组应用于整个元素块的任何建议?
    • 当然,但我仍然只是猜测我的答案。您的某些代码是隐藏的,例如分配 card 的值并查看更多代码会有所帮助。
    【解决方案4】:

    试试这样的 - 现在已经更新了 看这个小提琴 http://jsfiddle.net/8XBM2/1/

    var cardDeck = new Array();
    
    function createDeck() {
        for (i = 1; i <= 6; i++) {
            cardDeck.push("card-" + i);
        }
    }
    createDeck();
    var randDeck = cardDeck.sort();
    alert(randDeck);
    
    function randomizeDeck() {
        var x = 0;
        $('div').each(function(i){
         if ( i > 5) { 
    
                    $(this).addClass(randDeck[x]);
             x++; 
          } else {
            $(this).addClass(randDeck[i]);
        }
        });
    }
    randomizeDeck();
    

    【讨论】:

    • 我假设你想在 6 之后再次重新开始迭代
    • 是的,我希望数组应用两次,这样我就有了一个可以匹配两张卡片的类。
    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2016-04-08
    相关资源
    最近更新 更多