假设我有这个数组:
[{name: "A", works: true}, {name: "B", works: true}, {name: "C", works: false}]
我想要一个函数来选择这个数组的一个元素,比如说80%
获得一个工作元素的概率(works: true
)。
我怎么能优雅地做到这一点?将欣赏任何语言的伪代码或代码。
(如果需要我可以使用underscore.js
,如果使用js)
假设我有这个数组:
[{name: "A", works: true}, {name: "B", works: true}, {name: "C", works: false}]
我想要一个函数来选择这个数组的一个元素,比如说80%
获得一个工作元素的概率(works: true
)。
我怎么能优雅地做到这一点?将欣赏任何语言的伪代码或代码。
(如果需要我可以使用underscore.js
,如果使用js)
在您的情况下,首先您愿意掷硬币来决定您是否要选择一个工作元素或更少。这可以在 JS 中完成,Math.random()
其中返回一个[0,1]
.
value = Math.random() <= 0.8
将 value 设置为 true 80% 的时间。此时您已经知道想要哪种元素,因此您可以随机选择一个并检查是否有效。如果它的类型正确,则返回它,否则选择另一个随机的。
如果您的列表很长,这可能需要很多选择,在这种情况下,您可以拆分列表并保留两个列表(有效的和无效的)。
功能:
function chooser(an_array) {
var node_found = false;
var works = Math.random() <= .80;
while(node_found === false) {
var node = an_array[Math.floor(Math.random()*an_array.length)];
if(node.works === works) node_found = true;
}
return node;
}
编辑:决定我应该测试它。运行上述函数10000次,效果不错:http: //jsfiddle.net/YyZfA/4/