■ Aimless.jsとは?
Aimless.jsは、ランダム性を管理することのできるJavaScriptライブラリです。
■ Aimless.jsを使用する理由
JavaScriptでランダム性を管理するには、ネイティブ関数のMath.randomを利用できます。これは次のように使用されます:
const r = Math.random();
では、Aimless.jsは使用するメリットはどこにあるのでしょうか?
Math.random関数は、0から1までの浮動小数点数を返すだけなので、ランダム性を管理するためには、自身でコードをより複雑に書く必要があります。
いくつかの例を挙げて説明してみましょう。
例1:
ランダムなブール値を作成したい場合、次のようにコードを書く必要があります:
const r = Math.floor(Math.random() * 2);
const v = (r === 1) ? true : false;
console.log(v); // true または false
例2:
配列[1, 2, 3]からランダムに値を取得したい場合、次のようにコードを書く必要があります:
const a = [1, 2, 3];
const r = Math.floor(Math.random() * a.length);
const v = a[r];
console.log(v); // 1、2、または3
例3:
値に重みを付けながらランダム性を管理したい場合、コードはさらに複雑になります。例えば、配列[1, 2, 3, 4, 5, 6]があり、1、2、3、4、5はそれぞれ重み1で、6は重み10です。重みを考慮に入れたランダムな数値を取得するには、次のようにコードを書く必要があります:
const a = [1, 2, 3, 4, 5, 6];
// 重み
const weights = [1, 1, 1, 1, 1, 10];
// 重みの合計を計算
const totalWeight = weights.reduce((acc, weight) => acc + weight, 0);
// 0から重みの合計までのランダムな値を生成
const randomValue = Math.random() * totalWeight;
// 重みを考慮して要素を選択
let cumulativeWeight = 0;
let v;
for (let i = 0; i < a.length; i++) {
cumulativeWeight += weights[i];
if (randomValue <= cumulativeWeight) {
v = a[i];
break;
}
}
// 重みを考慮したランダムな値を表示
// 他の値よりも6がはるかに頻繁に表示されます
console.log(v);
■ Aimless.jsの使用方法
Aimless.jsを使用するには、次のように依存関係をインストールするだけです:
npm install aimless.js
次に、プロジェクトで必要な関数をインポートする必要があります。たとえば:
const { bool } = require('aimless.js');
前述の例にいくつかの修正を加えましょう:
例1(修正):
ランダムなブール値を作成したい場合、次のようにコードを書きます:
const { bool } = require('aimless.js');
const v = bool();
console.log(v);
例2(修正):
配列[1, 2, 3]からランダムに値を取得したい場合、次のようにコードを書きます:
const { oneOf } = require('aimless.js');
const a = [1, 2, 3];
const v = oneOf(a);
console.log(v);
例3(修正):
配列[1, 2, 3, 4, 5, 6]があり、1、2、3、4、5はそれぞれ重み1で、6は重み10です。
重みを考慮に入れたランダムな数値を取得するには、次のようにコードを書きます:
const { weighted } = require('aimless.js');
const a = [1, 2, 3, 4, 5, 6];
const weights = [1, 1, 1, 1, 1, 10];
const v = weighted(a, weights);
console.log(v);
■ 動画
Youtubeで動画を作成しました。