我正在尝试在jQuery中随机处理8张卡,但每当我发出8张卡后运行我的代码时,浏览器崩溃。它说我在while循环中的第144行有问题。 我做了这个循环来处理8个独特的随机卡。
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;
}
}
});
任何帮助都将受到高度赞赏。谢谢。
答案 0 :(得分:6)
只要while
的计算结果为true,您的arr.length==8
循环就会继续循环。在while
循环内,您不会更改arr
的项目数,因此,一旦项目数达到8,它将永远循环。
编辑:它可能仍然崩溃,因为Math.random()
返回0到1之间的数字。如果将此数字乘以8并加1,则此数字基本上始终在1到8之间,包括。该域由8个整数组成,与循环保持循环的数组中的元素数相同。由于数组中有8个数字,k
每次都是1到8之间的数字,k
将始终是数组中已存在的数字。因此它开始永远循环。如果你想要处理超过8张牌,你必须创建一个能够产生1到8范围之外的数字的函数。
答案 1 :(得分:0)
你可以这样做:
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;
}
}
});