我有一个数组,让我们说:
var people = [
{name: "Jack", weight: 10},
{name: "Beth",weight: 2},
{name: "Michael",weight: 5},
{name: "Elsa",weight: 6},
{name: "April",weight: 3},
{name: "John",weight: 6},
{name: "David",weight: 1}
]
我想从这个物品清单中挑选,同时根据体重更频繁地挑选一些物品。
我可以通过将每个物体推入一个单独的数组,与其重量值一样多次,以蛮力来做到这一点。
例如:var newArr = ["Jack", "Jack", "Jack", ........, "John", "John", "David"];
但这不是优雅和最佳的做事方式。给定大量对象,此解决方案不能提供良好的性能。
我想创建一个从数组中选择的函数,并运行该函数100次,甚至1000次以检查解决方案是否返回所需的分布。
function selectVolunteer(arr) {
// some code here
return randomVolunteer;
}
// Now run the function 1000 times to check this works
for (var i = 0; i < 10000; i++) {
function selectVolunteer(people)
}
那么,我有什么选择来创建一个更有效的算法,这样当我遍历100000个对象的列表时就不会有问题。
发布此内容时,我查看了StackOverflow建议的一些问题,但找不到我要找的内容。 @trincot提出了一个答案Generate A Weighted Random Number,但与我提出的问题存在一些冲突。如果我使用这些参数
arr = {0:0.1, 1:0.7, 2:0.9}
10000次运行建议的函数,它会给我输出:0 : 983 , 1 : 7011 and 2 : 2006
这是错误的,因为2的概率大于1,而outout表示不同的东西。
谢谢。