Javascript 从另一个数组的所有元素构造一个给定大小的随机数组,其出现的条件为上下界
我定义了一个名为Javascript 从另一个数组的所有元素构造一个给定大小的随机数组,其出现的条件为上下界,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我定义了一个名为box的数组,如下所示: var box = [a,b,c,d,e,f,g,h,i,j]; 我正在生成0到数组长度之间的随机数。在这种情况下,数组的长度为10: var random_number = Math.floor(Math.random() * box.length); 我通过将随机数作为数组索引传递,从框数组中检索值: var random_element = box[random_number]; 我需要使用box中的元素创建一个名为room的新数组,以便:
box
的数组,如下所示:
var box = [a,b,c,d,e,f,g,h,i,j];
我正在生成0到数组长度之间的随机数。在这种情况下,数组的长度为10:
var random_number = Math.floor(Math.random() * box.length);
我通过将随机数作为数组索引传递,从框
数组中检索值:
var random_element = box[random_number];
我需要使用box
中的元素创建一个名为room
的新数组,以便:
房间的大小为40
框
的每个元素都存在于房间
框中的每个元素必须在“房间”中出现至少3次
框中的每个元素必须在“房间”中出现最多5次
最低金额=3
最大金额=5
//我们还需要跟踪每个元素的数量
//每个元素的最小填充量
对于(i=0;i
洗牌
现在你的数组看起来像
[a,a,a,b,b,…,j,j,a,e,b,…]
。如果您需要更随意放置的项目,请考虑使用. 我认为@Destiners的想法非常适合这份工作。我只想分享一下我对这个想法的实施情况。我使用room
数组来保存字符和查找表。例如room.a
将给出room
数组中“a”字符的计数。然后应用一个通用的适当的洗牌
Array.prototype.shuffle=function(){
var i=此长度,
J
而(i>1){
j=~(Math.random()*i--);
[this[i],this[j]=[this[j],this[i]];
}
归还这个;
};
变量框=[“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“j”];
房间=box.reduce((p,c)=>(p[c]=3,p.push(…c.repeat(3).split(“”),p),[]);
同时(房间长度<40){
var c=box[~(Math.random()*box.length)];
房间[c]<5&(房间推(c),房间[c]+);
}
房间。洗牌();
控制台、日志(房间);
控制台日志(a室)代码>此问题与问题标签中提到的每种编程语言有什么关系?此数组\计数\值适用于您$a=数组(“a”、“猫”、“狗”、“a”、“狗”);打印(数组计数值($a));?>结果将是数组([A]=>2[Cat]=>1[Dog]=>2)@kirangadvi谢谢。请参阅我创建新数组的条件。例如,框中的元素是否唯一,或者a
是否可能等于b
?
MINIMUM_AMOUNT = 3
MAXIMUM_AMOUNT = 5
// We also need to track how much of each element we have
// Fill minimum amount of each element
for (i = 0; i < box.length; i++) {
for (j = 0; j < MINIMUM_AMOUNT; j++) {
room.push(box[i])
}
// At first the are only 3 elements
count[i] = MINIMUM_AMOUNT
}
// Fill the rest of the array
while (room.length != 40) {
random_index = Math.trunc(10 * Math.random())
random_elem = box[random_index]
// If this element did not yet reach its limit
if (count[random_index] < MAXIMUM_AMOUNT) {
room.push(random_elem)
count[random_index]++
}
}