-3
A
回答
0
有两个aproaches这个问题:
创建一个随机数,请检查是否它已经被摘下来,如果没有,这个值添加到输出。
var numbers = [];
while(numbers.length < 10){
var nr = Math.floor(Math.random() * 12)+1
if(numbers.indexOf(nr) === -1) numbers.push(nr);
else console.log("threw away ", nr);
}
这工作不错,如果您想选择号码少量出一个大范围, ,因为这里很可能打几碰撞(一遍又一遍挑选相同的随机数了一遍,必须扔掉它)。
在你的情况下10个值了一系列12的,这是很可能的,你将有其中的代码必须一遍又一遍地创建随机数结束时很多次 的一遍又一遍,以找到另一个 号这还不是你的设置。
所以我们得到第二个问题:创建一个包含所有可能值的集合,将其拖动, 然后从中分出一部分。
//a helper to shuffle the array
function shuffle(arr){
for(var i=arr.length; --i > 0;){
var j = Math.floor(Math.random() * i);
var tmp = arr[j];
arr[j] = arr[i];
arr[i] = tmp;
}
return arr;
}
//a helper to create a sequence ov values
function range(from, to, step){
step = Math.abs(+step) || 1;
to = +to || 0;
var i = +from || 0, out = [];
if(i > to) while(i>to) out.push(i), i -= step;
else while(i<to) out.push(i), i += step;
return out;
}
var numbers = shuffle(range(1,13)).slice(0, 10);
这将创造一个办法大的开销,如果你只需要一小套了一个巨大的价值
1
如果你想要1到20之间的15个随机整数而不重复,那就是你范围内的大部分整数。我只想生成的数字1-20和删除一个随机的15倍:
function randomIntegersInRange(min:int, max:int, count:uint):Array {
if (min >= max || count > max - min) throw new ArgumentError("Invalid arguments!");
var integers:Array = [];
for (var i:int = min; i <= max; i++) {
integers.push(i);
}
var randomIntegers:Array = [];
for (i = 0; i < count; i++) {
randomIntegers.push(integers.splice(Math.random() * integers.length, 1));
}
return randomIntegers;
}
randomIntegersInRange(1, 20, 15); // 16,4,3,13,8,17,1,19,20,15,6,18,14,10,12
randomIntegersInRange(1, 50, 20); // 27,3,19,9,42,23,13,29,11,24,41,31,26,2,7,30,49,33,6,10
注:我不建议这一点,如果你想大规模范围,如1至1,000,000 15点的整数。
0
做一个递归方法,
function pushIt(arr){
var idx:int;
if(arr.length == 10){ return arr; }
else {
idx = Math.floor(Math.random() * 12) + 1;
if(arr.indexOf(idx) == -1){ arr.push(idx); }
return pushIt(arr);
}
}
console.log(pushIt([]));
0
[5,1,8,4,如图10所示,9,11,2,6,7]
function generateUniqueArray(length, rangeMax){
var arr = [];
while(arr.length < length) {
var rand = Math.ceil(Math.random()*rangeMax);
var isInArr = false;
for(var i = 0; i<arr.length;i++){
if(arr[i]===rand){
isInArr = true;
break;
}
}
if (!isInArr){
arr[arr.length]=rand;
}
}
return arr;
}
console.log(generateUniqueArray(10,12));
+0
'generateUniqueArray(12,10)'* crash *;) – Aaron
0
你可以把它们放到哈希(js对象)中,然后返回哈希中的键:
function getUniques(arr){
var seen = {};
arr.forEach(function(item){
seen[item] = true;
});
return Object.keys(seen);
}
相关问题
- 1. 随机挑选,而不重复
- 2. 挑选随机坐标而不重复?
- 3. 随机洗牌数组
- 4. 如何实现随机 - 但不是太随机的重复洗牌
- 5. 需要使用密钥的可重复的随机数组随机洗牌
- 6. 随机挑选3个挑选的数字
- 7. 洗牌.txt文件随机
- 8. 无法随机洗牌
- 9. N-Puzzle伪随机洗牌?
- 10. 随机洗牌在PHP?
- 11. 洗牌的随机化
- 12. 随机随机洗牌C++数组(每次不同)
- 13. 随机数字不重复
- 14. 随机洗牌和函数指针
- 15. 创造可赢得的“随机”单人纸牌洗牌
- 16. ArrayList随机挑选
- 17. masonry.js不会洗牌
- 18. 当在Matlab中重复和随机化一个矩阵时约束洗牌
- 19. 随机数字与重复
- 20. 根据体重和挑选时间挑选随机密钥
- 21. 从资源随机洗牌文本
- 22. 洗牌列表中随机的Java
- 23. 随机洗牌错误信息
- 24. 从一组数字中挑选一个随机数
- 25. 生成随机数字而不重复
- 26. 不重复的随机数
- 27. 从string.xml中挑选随机字符串
- 28. 多个Numpy随机洗牌不加起来
- 29. 我不能让我的数组得到随机布尔人没有他们都得到相同?
- 30. 创建一个部分洗牌的随机数排序列表
的范围是Java或JavaScript?两者完全不同 –
@Xoce您怎么看?它在for循环中有'var i = 0'。 –
请问这是为什么java标记的比??? [此](http://stackoverflow.com/questions/9229645/remove-duplicates-from-javascript-array)帮助 –