-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. 隨機洗牌在PHP?
- 8. 洗牌.txt文件隨機
- 9. 列的隨機洗牌
- 10. 無法隨機洗牌
- 11. 洗牌的隨機化
- 12. N-Puzzle僞隨機洗牌?
- 13. 隨機洗牌列表
- 14. 隨機隨機洗牌C++數組(每次不同)
- 15. 隨機數字不重複
- 16. 隨數組中包含的最高數字隨機洗牌
- 17. 拆分數組,隨機洗牌
- 18. 隨機洗牌和函數指針
- 19. 創建一副牌和洗牌他們
- 20. Math.Random()挑選隨機數組
- 21. 在c中挑選隨機數字#
- 22. 創造可贏得的「隨機」單人紙牌洗牌
- 23. 挑選隨機值
- 24. ArrayList隨機挑選
- 25. masonry.js不會洗牌
- 26. 當在Matlab中重複和隨機化一個矩陣時約束洗牌
- 27. 這個簡單的洗牌算法是否會返回隨機洗牌的撲克牌?
- 28. 根據體重和挑選時間挑選隨機密鑰
- 29. 隨機數字與重複
- 30. 洗牌列表中隨機的Java
的範圍是Java或JavaScript?兩者完全不同 –
@Xoce您怎麼看?它在for循環中有'var i = 0'。 –
請問這是爲什麼java標記的比??? [此](http://stackoverflow.com/questions/9229645/remove-duplicates-from-javascript-array)幫助 –