随机选择并为每个选择重复特定次数
Random selection and repeat a specific amount of times for each selection
我想从数组中随机选择一个项目,直到指定的最大重复次数为止。
var array = ["cat", "dog"];
var maxRepeat = 10;
我想return猫和狗各10次,总共20次,顺序随机。
类似于:
cat
cat
dog
cat
dog
dog
cat
cat
dog
cat
dog
dog
dog
cat
cat
dog
cat
cat
dog
dog
您可以通过以下方式完成
function shuffle(a) {
for (let i = a.length; i; i--) {
let j = Math.floor(Math.random() * i);
[a[i - 1], a[j]] = [a[j], a[i - 1]];
}
}
let arr = ["cat", "dog"];
let temp = [];
for(let str of arr){
temp = temp.concat(Array(10).fill(str));
}
shuffle(temp);
console.log(temp);
var array = ["cat", "dog"];
var maxRepeat = 10;
var occObj= {};
for(var i = 0; i < array.length * maxRepeat; i++){
var occ = array[Math.floor(Math.random() * array.length)];
if(occObj[occ]){
if(occObj[occ].count < maxRepeat){
occObj[occ].count++;
console.log(occ);
}else{
i--; //if the particular value was displayed "maxRepeat" times already, we need to make sure we run the loop again
}
}else{
occObj[occ] = {}
occObj[occ].count = 1;
console.log(occ);
}
}
我正在使用对象来存储特定值显示的次数。
您可以使用简单的 for
循环,然后使用 push 或 unshift,其中每个元素都有 50% 的几率。
var array = ["cat", "dog"];
var maxRepeat = 10;
const random = function(arr, n) {
var c = 0,r = [],total = n * arr.length;
for (var i = 0; i < total; i++) {
var rand = Math.random() <= 0.5;
var el = arr[c++ % arr.length]
rand ? r.push(el) : r.unshift(el)
}
return r;
}
console.log(random(array, maxRepeat))
很难确切知道您要的是什么,但这里有一个函数可以 return 随机 "cat"
或 "dog"
(每只动物 10 次;毕竟动物们已经筋疲力尽了,那就return null
):
var array = ["cat", "dog"],
maxRepeat = 10;
let getRandomAnimal = (() => {
let totalAnimals = maxRepeat * array.length,
animals = new Array(totalAnimals),
index = 0;
for (let i = 0; i < totalAnimals; ++i) {
animals[i] = array[i % array.length];
}
animals.sort(() => Math.floor(Math.random() - 0.5));
return () => {
return ((index >= totalAnimals) ? null : animals[index++]);
};
})();
我想从数组中随机选择一个项目,直到指定的最大重复次数为止。
var array = ["cat", "dog"];
var maxRepeat = 10;
我想return猫和狗各10次,总共20次,顺序随机。 类似于:
cat
cat
dog
cat
dog
dog
cat
cat
dog
cat
dog
dog
dog
cat
cat
dog
cat
cat
dog
dog
您可以通过以下方式完成
function shuffle(a) {
for (let i = a.length; i; i--) {
let j = Math.floor(Math.random() * i);
[a[i - 1], a[j]] = [a[j], a[i - 1]];
}
}
let arr = ["cat", "dog"];
let temp = [];
for(let str of arr){
temp = temp.concat(Array(10).fill(str));
}
shuffle(temp);
console.log(temp);
var array = ["cat", "dog"];
var maxRepeat = 10;
var occObj= {};
for(var i = 0; i < array.length * maxRepeat; i++){
var occ = array[Math.floor(Math.random() * array.length)];
if(occObj[occ]){
if(occObj[occ].count < maxRepeat){
occObj[occ].count++;
console.log(occ);
}else{
i--; //if the particular value was displayed "maxRepeat" times already, we need to make sure we run the loop again
}
}else{
occObj[occ] = {}
occObj[occ].count = 1;
console.log(occ);
}
}
我正在使用对象来存储特定值显示的次数。
您可以使用简单的 for
循环,然后使用 push 或 unshift,其中每个元素都有 50% 的几率。
var array = ["cat", "dog"];
var maxRepeat = 10;
const random = function(arr, n) {
var c = 0,r = [],total = n * arr.length;
for (var i = 0; i < total; i++) {
var rand = Math.random() <= 0.5;
var el = arr[c++ % arr.length]
rand ? r.push(el) : r.unshift(el)
}
return r;
}
console.log(random(array, maxRepeat))
很难确切知道您要的是什么,但这里有一个函数可以 return 随机 "cat"
或 "dog"
(每只动物 10 次;毕竟动物们已经筋疲力尽了,那就return null
):
var array = ["cat", "dog"],
maxRepeat = 10;
let getRandomAnimal = (() => {
let totalAnimals = maxRepeat * array.length,
animals = new Array(totalAnimals),
index = 0;
for (let i = 0; i < totalAnimals; ++i) {
animals[i] = array[i % array.length];
}
animals.sort(() => Math.floor(Math.random() - 0.5));
return () => {
return ((index >= totalAnimals) ? null : animals[index++]);
};
})();