# Perform Weighted Random with JavaScript

Weighted random is a non-uniform random method that each values has specific probability to be picked. The values with higher weight are more likely to be the random result while lower weighted one are less likely but still eligible.

For regular random with range, read this article instead.

## Snippet 1 (Specific Probability)

function weightedRandom(prob) { let i, sum=0, r=Math.random(); for (i in prob) { sum += prob[i]; if (r <= sum) return i; } }

### Usage

Pass the numbers and their weight to the function.

let result = weightedRandom({0:0.6, 1:0.1, 2:0.1, 3:0.2});

## Snippet 2 (Weighted Distribution)

A random function that has normal distributed random chance from *min* to *max *parameters. The *mean* is a number that has the highest chance while *varianceFactor *determine the spread of probability. (The higher *varianceFactor *the higher chance that the result is close to the mean value.)

This snippet utilize the chance.js library

<script src="https://cdnjs.cloudflare.com/ajax/libs/chance/1.0.18/chance.min.js"></script>

function weightedRandomDistrib(min,max,mean,varianceFactor) { let prob = [], seq = []; for(let i=min;i<max;i++) { prob.push(Math.pow(max-Math.abs(mean-i),varianceFactor)); seq.push(i); } return chance.weighted(seq, prob); }

### Usage

Random number between -10 to 11 with 0 has the highest chance and variance factor of 3.

let result = weightedRandomDistrib(-10,11,0,3);