Skip to content
Node.js module to make a random choice among weighted elements of table.
JavaScript
Find file
Latest commit 3e51e8d @parmentf Fix image in README.
:/
Failed to load latest commit information.
src Rewrite in ES6.
test Rewrite in ES6.
.babelrc Rewrite in ES6.
.eslintrc Rewrite in ES6.
.gitignore Ignore lib directory.
.npmignore Rewrite in ES6.
.travis.yml Fix travis.yml
README.md Fix image in README.
package.json Add babel-core as a dependency.

README.md

Random Weighted Choice

Build Status Code Coverage Node.js module to make a random choice among weighted elements of table.

Installation

With npm do:

$ npm install random-weighted-choice

Examples

Although you can add several times the same id

var rwc = require('random-weighted-choice');
var table = [
    { weight: 1, id: "item1"} // Element 1
  , { weight: 1, id: "item2"} // Element 2
  , { weight: 4, id: "item3"} // Element with a 4 times likelihood
  , { weight: 2, id: "item1"} // Element 1, weight added with 2 => 3
];
var choosenItem = rwc(table);
var choosenUnlikely = rwc(table, 100); // The last shall be first
var choosenDeterministically = rwc(table, 0);

It is better to not use the same twice, if you want a temperature other than the default one (50).

var rwc = require('random-weighted-choice');
var table = [
    { weight: 1, id: "item1"} // Element 1
  , { weight: 1, id: "item2"} // Element 2
  , { weight: 4, id: "item3"} // Element with a 4 times likelihood
  , { weight: 2, id: "item4"} // Element 4
  , { weight: 2, id: "item5"}
];
var choosenItem = rwc(table);
var choosenUnlikely = rwc(table, 100); // The last shall be first
var choosenDeterministically = rwc(table, 0);

Without temperature (second parameter) or a 50 value, likelihoods are:

{ item1: 10%, item2: 10%, item3: 40%, item4: 20%, item5: 20% }

With a temperature value of 100:

{ item1: 30%, item2: 30%, item3: 0%, item4: 20%, item5: 20% }

With a temperature value of 0, modified weights are:

{ item1: 0, item2: 0, item3: 8, item4: 2, item5: 2 }

Usage

random-weighted-choice(Array table, Number temperature = 50)

Return the id of the chosen item from table.

The table parameter should contain an Array. Each item of that Array must bean object, with at least weight and id property.

Weight values are relative to each other. They are integers.

When the sum of the weight values is null, null is returned (can't choose).

When the Array is empty, null is returned.

More explanations on how it works on Everything2.

Also

Something went wrong with that request. Please try again.