Probability.js makes it easy to call JavaScript functions by probability in Node.js and the browser.
Circumstances are rare that you need to call functions by a certain probability in your daily work. But sometimes, especially in game development and in statistical applications, it's very handy to have an easy way of doing so. This library is inspired by this question on stackoverflow.com.
A probabilitilized function
are several functions combined to one function by
probability objects
. It is created by calling the constructor Probability()
with probability objects
as arguments:
var probabilitilized = new Probability(probabilityObject, probabilityObject /* , ... */);
or with an array of probability objects
:
var probabilitilized = new Probability([probabilityObject, probabilityObject /* , ... */]);
A probability object
consists of an object with the properties p
and f
.
p
is the probability by that the function f
is called when the
probabilitilized function
is invoked.
The value of the probability p
have to be a string with an integer value
suffixed with %
between 0 and 100 or preferred a float lesser than or equal to
1.0. f
is an ordinary JavaScript function:
var probabilityObject = {
p: '50%',
f: function () {}
};
/* or */
var probabilityObject = {
p: 0.5,
f: function () {}
};
The sum of all probabilities p
must be lesser or equal to 100%
or, respectively,
1.0
. Otherwise a TypeError
is thrown. That's also the case for malformed
probabilityObjects
.
/* a counter to show the number of function calls */
var counter = {
0: 0,
1: 0,
2: 0
};
/* create a "probabilitilized function" by invoking Probability() with 3 "probability objects" */
var probabilitilized = new Probability({
p: '30%', /* the probability by that ... */
f: function () { /* ... this function is called */
counter[0]++;
}
}, {
p: '10%',
f: function () {
counter[1]++;
}
}, {
p: '60%',
f: function () {
counter[2]++;
}
});
/* call the probabilitilized functions 100 times */
for (var i = 0; i < 100; i++) {
probabilitilized();
}
/* show that every function is called by its probability */
console.log(counter); // => {"0":27,"1":11,"2":62}