在javascript中随机处理卡片 - jquery

ziz*_*194 0 html javascript jquery

我试图在jQuery中随机处理8张卡,但每当我在8张卡发出后运行我的代码时,浏览器就会崩溃.它说我在while循环中的第144行有问题.我做了这个循环来处理八个独特的随机卡.

var n = 0
var card = [{id: 1}, {id: 2}, {id: 3}, {id: 4}, {id: 5}, {id: 6}, {id: 7}, {id: 8}];
var arr = [];
var n = Math.floor((Math.random() * 7) + 1);

doOne(0, n);

function doOne(index, rand) {
    var thisCard = card[index];
    var p = $("#hand1_" + thisCard.id);
    var offset = p.offset();
    var zindex = p.css('z-index');
    if (thisCard) {
        $('#card' + rand).css('z-index', zindex);

        $('#card' + rand).animate({
            top: offset.top,
            left: offset.left,
            }, 
            function() {
                arr.push(rand);
                k = Math.floor((Math.random() * 8) + 1);
                // line 144 i have a problem here
                while (exist(arr, k) == true || arr.length == 8) {
                    k = Math.floor((Math.random() * 8) + 1);
                }
                doOne(index + 1, k);
            });
     }
}

function exist(arr, obj) {
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] == obj)
            return true;
    }
}
});
Run Code Online (Sandbox Code Playgroud)

任何帮助将受到高度赞赏.谢谢.

Pat*_*ens 6

while只要arr.length==8计算结果为true,您的循环就会保持循环.在while循环内你不会改变项目的数量,arr因此,一旦项目数量达到8,它将永远循环.

编辑:它可能仍然崩溃,因为Math.random()返回0到1之间的数字.如果将此数字乘以8并加1,则此数字基本上始终在1到8之间,包括.该域由8个整数组成,与循环保持循环的数组中的元素数相同.由于数组中有8个数字,k并且每次都是1到8之间的数字,因此k将始终是数组中已存在的数字.因此它开始永远循环.如果您想要处理超过8张牌,则必须创建一个能够产生1到8范围之外的数字的函数.