1

假设我有这个数组:

[{name: "A", works: true}, {name: "B", works: true}, {name: "C", works: false}]

我想要一个函数来选择这个数组的一个元素,比如说80%获得一个工作元素的概率(works: true)。

我怎么能优雅地做到这一点?将欣赏任何语言的伪代码或代码。

(如果需要我可以使用underscore.js,如果使用js)

4

2 回答 2

3

在您的情况下,首先您愿意掷硬币来决定您是否要选择一个工作元素或更少。这可以在 JS 中完成,Math.random()其中返回一个[0,1].

value = Math.random() <= 0.8

将 value 设置为 true 80% 的时间。此时您已经知道想要哪种元素,因此您可以随机选择一个并检查是否有效。如果它的类型正确,则返回它,否则选择另一个随机的。

如果您的列表很长,这可能需要很多选择,在这种情况下,您可以拆分列表并保留两个列表(有效的和无效的)。

于 2012-10-28T12:46:18.983 回答
1

功能:

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/

于 2012-10-28T13:03:11.477 回答