从1-9之间的随机数字列表中选出3个相同的数字
3 numbers the same from a random numbers list between 1-9
如果我有一个数组,从9个数字的列表中给我9个随机数,我如何确保它只能重复3个相同的数字?例如,如果我的随机数数组是[4,3,4,7,8,8,9]。我需要在任何一个数组中只有一个三元组,而不是像上面看到的那样有两个。
您需要将randomNum
替换为用于存储添加到数组中的随机数的任何内容,但请尝试以下操作:
var arrayOfRandomNums = [];
function maxInstancesInArray(arr, val) {
var hits = [];
for(i = 0; i < arr.length; i++)
if (arr[i] === val)
indexes.push(i);
return indexes.length > 2;
}
if(!maxInstancesInArray(arrayOfRandomNums, randomNum) {
arrayOfRandomNums.push(randomNum);
}
如果数组中已经有3个或更多传入数字的实例,则函数将返回true,因此您可以使用它来定义是否将下一个实例推送到数组中。
我制作了一个jsFiddle,它可以提供帮助。这个想法是,与其每次都试图获取rundom数字并进行检查,不如在数组中列出可用数字的列表,并随机选择该数组的索引。
https://jsfiddle.net/m8ohmxmb/
function randNumber(maxRange,maxOccurrencies, resultArrayLenght) {
var num = [];
var occ = [];
var result = [];
var randElem;
for (var i = 0; i < maxRange; i++) {
num.push(i + 1);
occ.push(0);
}
for(i = 0; i < resultArrayLenght; i++) {
randElem = Math.floor(Math.random() * num.length);
occ[randElem] = occ[randElem] + 1;
result.push(num[randElem]);
if(occ[randElem] === maxOccurrencies) {
occ.splice(randElem,1);
num.splice(randElem,1);
}
}
return result;
}
这是一种直接的方法,使用一个临时对象来保存insertet值及其计数。
function push(n) {
if (count.full && count[n] === 2) {
alert('can not insert ' + n);
return;
}
array.push(n);
count[n] = (count[n] || 0) + 1;
if (count[n] === 3) {
count.full = true;
}
}
var array = [],
count = {};
[4, 3, 4, 4, 7, 8, 8, 8, 9].forEach(push);
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');
相关文章:
- 如何在这里将两个值最低的数字相加
- 正则表达式与数字中的第二个点匹配
- 可以't将几个数字设置为<输入类型=“;数字“>
- 正好包含2个大写字母和3个数字的正则表达式
- 使用正则表达式匹配长度为六个字符的字母数字字符串
- 如何限制一个字段只接受4个数字字符作为输入,并获得'It’这是潜水警报
- 计算HTML表TD中两个数字之间的百分比
- 如何使用 JavaScript 将两个数字相加
- 创建具有2个唯一数字的Javascript数组
- 如何使用至少一个数字、一个大写字母和6-20个字符验证密码
- 用于添加两个数字的javascript闭包的用法
- 通过变量在两个数字之间切换
- 在数字字符串的最后两个数字上加上小数
- 在HTML/JavaScript中减去两个数字
- 删除第一个数字块之后的所有数字
- PHP函数识别3个数字中最低的一个并更改其类
- 将文本字段限制为三个数字
- 如何创建一个确定2个数字之间值的函数
- 用于获取两个方括号之间的数字的正则表达式
- 在列之间平分一个数字.12个糖果,10个人.2个人每人得到2个糖果,剩下的人得到1个