weighted()
更新日: 2018-09-04
weighted()
// 使い方
chance.weighted(['a', 'b'], [100, 1])
chance.weighted(['a', 'b', 'c', 'd'], [1, 2, 3, 4])
データの配列と、重みを指定する配列を渡すことで、 指定した重みに従って、ランダムに1つのデータを取得します。
例えば、以下の場合、
chance.weighted(['a', 'b'], [100, 1]);
=> 'a'
a
はb
よりも100倍の頻度で選択されます。 しかし、どちらもランダムです。
重みは全ての相対値であるため、 2つ以上のデータが指定されている場合は、 全てのデータが重みに基づいて選択されます。
例えば、以下の場合、
chance.weighted(['a', 'b', 'c', 'd'], [1, 2, 3, 4]);
=> 'c'
配列から文字を取得する際に、 a
の2倍の頻度でb
が選択され、 a
の3倍の頻度でc
が選択され、 a
の4倍の頻度でd
が選択され、 b
の2倍の頻度でd
が選択されます。
重みは整数または、小数を指定することができます。
chance.weighted(['a', 'b', 'c', 'd'], [0.1, 0.2, 0.3, 0.4]);
=> 'd'
重みは特に合計して意味のある数値にする必要はありません。 全て相対的に扱うので、以下の全てが同等になります。
chance.weighted(['a', 'b', 'c', 'd'], [1, 2, 3, 4]);
chance.weighted(['a', 'b', 'c', 'd'], [0.1, 0.2, 0.3, 0.4]);
chance.weighted(['a', 'b', 'c', 'd'], [100, 200, 300, 400]);
chance.weighted(['a', 'b', 'c', 'd'], [17, 34, 51, 68]);
chance.weighted(['a', 'b', 'c', 'd'], [0.17, 0.34, 0.51, 0.68]);
思い出してください。 JavaScriptはファーストクラスの関数があるので、 以下のように指定することもできます。
chance.weighted([chance.fbid, chance.twitter, chance.ip], [10, 5, 1])();
=> 10000345166213
上記は、重みに基づいてChanceメソッドが選択され、選択されたメソッドを即時実行します。 そのため、fbidはtwitterユーザー名の2倍(10/5 = 2
)、 ipの10倍(10/1 = 10
)の頻度で返されます。 また、twitterユーザー名はipの5倍(5/1 = 5
)の頻度で返されます。
デモ
ボタンを押すと、重みに合わせて天気を表示します。
結果:
JavaScript
var button = document.getElementById('get-result');
button.addEventListener('click', function() {
var chance = new Chance();
items = ['はれ☀', 'くもり☁', 'あめ☔', 'ゆき⛄'];
weights = [50, 20, 30, 10];
document.getElementById('result').innerHTML = chance.weighted(items, weights);
}, false);
HTML
<button id="get-result">結果表示</button>
<div>
<span>結果:</span>
<span id="result"></span>
</div>
© 2015 Victor Quinn Released under the MIT license
このコンテンツはVictor Quinn(victorquinn)によるChanceドキュメントを翻訳/改変したものです。