jquery:避免过多的递归
jquery: avoid too much recursion
我有一个脚本,将54张扑克牌随机分配给4名玩家,它将生成2个随机数来获得一张随机牌,类别号(从1到4)表示:"红桃、黑桃、钻石、球杆",以及卡号(从1至13)。
问题是这个脚本中有太多的递归,那么我如何通过调用线程中的函数或类似的东西来避免这个错误呢?
我的代码:
$(document).ready(function(){
var human = [];
var east = [];
var west = [];
var north = [];
var used_cards = [];
distributeCards(north,$('#north'));
distributeCards(east,$('#east'),'vertical');
distributeCards(west,$('#west'));
distributeCards(human,$('#south'));
function distributeCards(array,container,view){
for(var i = 0; i < 13; i++){
var category,card;
do{
var uniqueCard = uniqueRandomCard();
}while(typeof uniqueCard === "undefined")
category = uniqueCard[0];
card = uniqueCard[1];
array.push(uniqueCard);
var category_name = '';
if(category === 1){
category_name = 'hearts';
}
else if(category === 2){
category_name = 'spades';
}
else if(category === 3){
category_name = 'diamonds';
}
else if(category === 4){
category_name = 'clubs';
}
if(card === 1){
card = 'ace';
}
else if(card === 11){
card = 'jack';
}
else if(card === 12){
card = 'queen';
}
else if(card === 13){
card = 'king';
}
if(view === 'vertical'){
$(container).children('.row').append('<img src="cards/backRotate.png" class="card"/>');
}
else if(view === 'horizontal'){
$(container).children('.row').append('<img src="cards/back.png" class="card"/>');
}
}
}
function randomNumberFromRange(min,max){
return Math.round(Math.floor(Math.random()*max)+min);
}
function uniqueRandomCard(){
var card = randomNumberFromRange(1, 13);
var category = randomNumberFromRange(1, 4);
if(!inAssocArray(category,card,used_cards)){
var array = [];
array[0] = category;
array[1] = card;
used_cards.push(array);
return array;
}
else{
uniqueRandomCard();
}
}
function inAssocArray(key,value,array){
var flag = false;
for(var i = 0; i < array.length; i++){
if(array[i][0] === key && array[i][1]=== value){
flag = true;
}
}
return flag;
}
});
用实现递归的方式修复递归非常容易。只需将call和if语句替换为while语句即可。
function uniqueRandomCard(){
var card = randomNumberFromRange(1, 13);
var category = randomNumberFromRange(1, 4);
while(inAssocArray(category,card,used_cards)) {
card = randomNumberFromRange(1, 13);
category = randomNumberFromRange(1, 4);
}
var array = [];
array[0] = category;
array[1] = card;
used_cards.push(array);
return array;
}
也就是说,有一些基本的更好的方法来处理这样的有限集合。存储未使用的卡片并从中随机选择要优越得多。
相关文章:
- 将jQuery对象传递到setTimeout递归函数中
- jQuery递归搜索类的父元素
- 有没有一种方法可以用步骤递归调用jQuery animate()
- jQuery:如何正确地暂停递归
- jQuery-防止过多的递归
- jQuery解包多个递归节点
- 不使用递归创建jquery无限动画
- jquery递归函数转换为非递归函数
- jQuery setTimeout ajax递归函数在即时消息程序中短时间后抛出错误
- jQuery递归函数调用和Javascript之间有区别吗;s setInterval
- jQuery如何在递归函数中使变量按值递增
- 寻找关于改进我的javascript(jquery)代码的想法.递归函数
- jQuery.fadeIn()和.fadeOut()回调在将代码重写为递归回调后无法正常工作
- jquery:避免过多的递归
- AngularJS 嵌套的 jQuery UI 具有递归的可存储性
- JQuery 验证 - 太多的递归 - 堆栈溢出
- 如何使用jQuery.map递归修改嵌套对象
- 将 jQuery 递归动画转换为 requestAnimationFrame
- 递归jquery函数,然后进行检查
- 在递归JQuery/Javascript自执行函数(轮询)中设置变量