unusual v0.0.3
unusual
A toolkit for idempotent randomness
Inspired by chance but designed to be much smaller in size.
Installation
Install with npm or yarn:
npm i unusualor
yarn add unusualUsage
Add unusual to your files like so:
const Unusual = require('unusual')
// or, in ESM
import Unusual from 'unusual'
const SEED = 420 // accepts numbers / strings / arrays
const unusualInstance = new Unusual(SEED)Then you will be able to use unusualInstance's instance methods such as:
API
random
Just like Math.random but consistent via a given seed value.
const x = unusualInstance.random()
console.log(x) // 0.31564591475762427integer
Given a min and a max value, generate a random number between the two.
const x = unusualInstance.integer({min: 0, max: 30})
console.log(x) // 15pick
Given an array of values, pick one randomly.
const x = unusualInstance.pick('random'.split(''))
console.log(x) // 'n'pickKey
Given an object, pick a key randomly.
const input = {a: 'aardvark', b: 'beetle', c: 'crab'}
const x = unusualInstance.pickKey(input)
console.log(x) // 'a'pickValue
Given an object, pick a value randomly.
const input = {a: 'aardvark', b: 'beetle', c: 'crab'}
const x = unusualInstance.pickValue(input)
console.log(x) // 'aardvark'floor
A shorthand equivalent to: Math.floor(Math.random() * x)
const x = unusualInstance.floor(100)
console.log(x) // 87floorMin
A shorthand equivalent to: Math.floor(Math.random() * x) + min)
Please note that the minimum value comes first (and this function is curried):
const x = unusualInstance.floorMin(10, 5)
console.log(x) // 10shuffle
Shuffle a given array.
const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('')
const x = unusualInstance.shuffle(alphabet)
console.log(x)
/* [
'j', 'e', 'x', 'p', 'f', 'r',
'd', 'g', 'z', 'l', 't', 'u',
'o', 'a', 'n', 'v', 's', 'k',
'h', 'm', 'c', 'y', 'b', 'i',
'w', 'q'
] */Debugging
This module ships with an identical but easier-to-debug copy of its core API.
It uses envtrace / debug under the hood.
To use it, simply change:
import Unusual from 'unusual'to
import Unusual from 'unusual/debug'instead.
Then in node you can set the DEBUG='unusual:*' environment variable (or in browser, you can set: localStorage.debug = 'unusual:*') in order to see per-function logging.
Please see the documentation for envtrace and debug for more information.