Javascript 始终在3K数字范围内选择不同的数字
我正在用Javascript构建一个混合应用程序,它可以随意地从数据库中选择一个练习,等待用户解决,然后选择另一个练习 在这一点上并没有什么困难,我的问题是总是从数据库中选择一个不同的练习 现在,我的代码以这种方式“工作”:Javascript 始终在3K数字范围内选择不同的数字,javascript,arrays,database,random,Javascript,Arrays,Database,Random,我正在用Javascript构建一个混合应用程序,它可以随意地从数据库中选择一个练习,等待用户解决,然后选择另一个练习 在这一点上并没有什么困难,我的问题是总是从数据库中选择一个不同的练习 现在,我的代码以这种方式“工作”: 获取练习的总数(约3K) 生成一个从1到3000的N个随机数 从DB中选择N个练习 将N号保存在“已使用”数据库表中 生成另一个数字名称 这一次首先检查生成的号码是否已被使用 如果没有选择练习,如果是,则生成另一个数字 等等 该代码对于前2000-2500个数字运行良好,然
1. SELECT COUNT(*) AS countArt FROM Exercises'
这里我从1到TotalNumberOfExactions中选择一个随机数
2. randomNumber = random(totalNumberOfExercises);
function numeroCasuale(len){
var num = Math.floor(Math.random() * len) + 0;
return num;
};
在这里,我检查我的随机数是否已经在数据库中,这意味着已经使用了
4. SELECT EXISTS(SELECT * FROM alreadyUsed WHERE numero=randomNumber)
如果存在随机数,我将生成另一个随机数并反复检查…使用另一个随机数的洗牌功能: 您可以创建以下内容:
function generateRandomSequence(amount){
var random = [];
for (var i = 0; i<amount; i++) random[i] = i;
return shuffle(random);
}
var random = generateRandomSequence(3000);
var gamesCompleted = 0;
function nextGame(){
console.log(random[gamesCompleted]);
gamesCompleted++;
}
nextGame();
函数生成器域序列(金额){
var random=[];
对于(var i=0;i.最好从所有可能的3000个数字中生成一个数组,然后删除已经使用的数字,然后从剩余的未使用数字中获取一个随机数。将1到3000的数字放入一个数组,然后将数组洗牌。然后,您可以通过在数组中增加索引来选择数字,并且您可以保证不会这样做获取一个副本。如何生成此随机数(SQL或应用程序)?您使用的是什么数据库?您可以发布一些代码吗?@Pointy如何洗牌数组?生成一个介于1到3000之间的随机数。如果该数字以前未生成过,请标记该数字已使用过。如果该数字以前使用过,请使用下一个编号,即(随机数+1)。如果它是索引中的最后一个数字,请转到第一个数字。这样,您将始终得到一个未使用的数字。为了加快此过程,您可以预先计算随机数并存储在表中,然后只需依次获取表中的下一个索引。我认为您的答案是好的,但我的问题是我需要d永久存储随机数数组,因为代码需要在PaoneGap应用程序中工作,我希望即使用户关闭appAha,所选的练习也是唯一的。在这种情况下,请将其保存在本地存储中。快速示例,当应用程序启动时,检查iflocalStorage.getItem('randomSequence'))==null
如果为true,则生成序列并将其保存到localStorage,如果为false,则从那里获取项目。您需要使用JSON.stringify()
和JSON.parse()
将其作为字符串存储在localStorage中。别忘了保存并加载游戏完成的数量。这有意义吗?如果你愿意,我可以写一个例子并将其添加到答案中。非常感谢!我了解localStorage,我只是问一个问题:localStorage读/写速度不是很慢吗?如果你有很多数据,并且注意到它是同步的,这意味着你的应用程序在加载数据时会挂起。我认为你应该测试一下它的影响。将一个日期对象保存到一个变量中,并在加载和保存后从另一个日期对象中减去它。总之,你将在每个安装生命周期编写一次序列,并在用户每次打开应用程序时检索它(不是从后台)。我认为这还不错。使用WebSQL(我已经在使用)怎么样?应该更快,还是我错了?
function generateRandomSequence(amount){
var random = [];
for (var i = 0; i<amount; i++) random[i] = i;
return shuffle(random);
}
var random = generateRandomSequence(3000);
var gamesCompleted = 0;
function nextGame(){
console.log(random[gamesCompleted]);
gamesCompleted++;
}
nextGame();