[英]populate array with UNIQUE random numbers javascript
我有一个数组:
var array = new Array();
这是随机函数,它给出了min
和max
之间的随机数(在之前的Stackoverflow主题中可以看到):
function randomIntFromInterval(min,max) {
return Math.floor(Math.random()*(max-min+1)+min);
}
该阵列意味着有9个细胞。 我想用随机数填充它,重要的条件是每个数字都是唯一的,这意味着这个数组中的数字不能找到两次或更多。所以最后,这里是我被卡住的地方(整个代码):
var array = new Array();
function randomIntFromInterval(min,max) {
return Math.floor(Math.random()*(max-min+1)+min);
}
// populate the variable "array" with 9 different
// random numbers
function randomlyInitializeArray() {
var random = 0;
// For each cell (9 cells) in my "array"
for (var i = 0; i < maxLength; i++) {
// Return a number between 1 & 9
random = randomIntFromInterval(1, maxLength);
/* Verifying if this random number is already in
the "array" /!\ stuck here /!\ */
}
}
那么,使用9个唯一(不同)数字填充数组的逻辑是什么?
所以你想要1-9的9个随机唯一数字? 在我看来,想要以随机顺序排列数字1到9是一样的。
这可以通过以下方式完成:
[1,2,3,4,5,6,7,8,9].sort(function () { // shuffle
return Math.random() - 0.5; // returns > 0 ~50% of the time
});
否则你可以这样做:
var array = [];
while (array.length < 9) {
array = array_unique(array.concat([ get_random_number() ]);
}
console.log(array);
大多数框架都有这样或那样的array_unique
函数,或者只编写自己的函数。
有更快的方法可以做到这一点,但明确包含对unique()
的调用使得这个实现易于理解和验证。
如果要从特定间隔获取9个随机数(使用该函数):
您可以使用do-while
循环来获取随机数,直到您拥有一个唯一的数字。
您可以通过contains()
函数检查数字是否已存在于数组contains()
。
for (var i = 0; i < maxLength; i++) {
do {
random = randomIntFromInterval(1, maxLength);
while( array.contains(random) ); // will return false if random isn't asigned
array.push(random);
}
如果您不关心间隔,并且您只需要9个唯一值(按随机顺序为1-9),则可以使用1-9创建数组并将其随机播放:
var myArray = ['1','2','3','4','5','6','7','8','9'];
newArray = shuffle(myArray);
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;
};
shuffle方法取自我如何随机播放一个数组
为什么不从1到最大值获得一个数组然后将其洗牌
//+ Jonas Raoni Soares Silva //@ http://jsfromhell.com/array/shuffle [v1.0] function shuffle(o) { //v1.0 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 randomIntFromInterval(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); } // populate the variable "array" with 9 different // random numbers function randomlyInitializeArray(min, max) { var start = min; var randomMax = randomIntFromInterval(min, max) var myArray = []; for (var i = 0; start <= randomMax; myArray[i++] = start++); myArray = shuffle(myArray); console.log("Min: "+min); console.log("Max: "+max); console.log("random Max: "+randomMax) console.log(myArray) } randomlyInitializeArray(2,40);
我推荐一个while
循环,类似于
function unique_nums(n) {
var myarray = [];
for (var i=0;i<n;i++){
var next_num = Math.random();
while (myarray.indexOf(next_num) !== -1) {
next_num = Math.random();
}
myarray.push(next_num);
}
return myarray;
}
这将确保在push
之前数组中不存在随机数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.