始终在 3K 数字范围内选择不同的数字
Pick always a different number in a range of 3K numbers
我正在 Javascript 中构建一个混合应用程序,它随意地从数据库中选择一个练习,等待用户解决它,然后选择另一个练习。
在这一点上没有什么困难的,我的问题是总是从数据库中选择不同的练习。
现在我的代码以这种方式"工作":
- 获取练习总数(约 3K),
- 生成一个从 1 到 3000 的 N 个随机数,
- 从数据库中选择 N 个练习,
- 将 N 个数字保存在"已使用的"db 表中,
- 生成另一个数字名称,
- 这次首先检查生成的数字是否已经被使用,
- 如果没有选择练习,如果 YES 生成另一个数字,
- 等。。。
代码适用于前 2000-2500 个数字,然后开始非常慢,因为生成尚未使用的随机数开始非常困难。当使用的数字略小于3K时,代码完全被破坏:继续检查,但新数字永远不会出现
如何以快速而轻便的方式处理这种情况,尽可能少地使用内存?
谢谢!
编辑
我在电话间隙应用程序中使用 WebSQL
这就是我正在做的(代码):
在这里我得到了练习的数量
1. SELECT COUNT(*) AS countArt FROM Exercises'
在这里,我从 1 到总练习数中选择一个随机数
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 shuffle(o){
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
}
您可以创建以下内容:
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();
这将创建一个位置 0 = 0、1 = 1 等的数组,并对其进行洗牌,以便我们得到一个没有双倍的随机序列。跟踪您已完成的游戏数量,并使用此数字作为下一个问题的索引。这是一个小提琴。
相关文章:
- Javascript Regex选择每个非字母数字字符和空白
- 按数字而不是按名称选择JSON对象
- 选择下拉选项时显示数字-javascript
- 使用jQuery可以根据数字选择一组同级
- 不能同时通过类和数字 ID 选择 jquery 元素
- 按数字选择显示输入
- Javascript数字选择器函数
- 如何在输入框中只显示名称,而在选择元素的下拉列表中显示名称和数字
- 如果在JavaScript w/HTML中选择了特定国家/地区,如何要求邮政编码为数字
- 在引导选择组件中的搜索不起作用,其中数据令牌包含所有数字;4730”;
- 下拉列表创建订单,不能在每个下拉列表中选择相同的数字
- 如何在 jquery 颜色选择器中设置数字十六进制颜色
- Jquery - 检查选择器是否以数字结尾
- 在 jQuery 中选择数字动态元素
- 将文本字段中的数字与数组中的数字进行比较,具体取决于 PHP 和 jQuery 的选择
- 如果选择达到数字,则发出 JavaScript 警报
- 我想根据从代码点火器的选择框中选择的数字显示图像
- 从数组中选择特定数字
- 根据文本字段的11位数字的前两位数字选择下拉值
- 链接html数字选择