unique()
unique()
// 使い方
chance.n(chance.email, 5)
chance.n(chance.email, 5, { domain: "socialradar.com" })
unique()
に、ランダムなデータを生成する任意の関数(通常は他のChance関数)と、 数値(データを生成する個数)を渡すことで、 指定した個数のユニークなデータを格納した配列を生成します。
chance.unique(chance.state, 5);
=> ["SC", "WA", "CO", "TX", "ND"]
限られた数の選択肢と、それぞれが確実にユニークなデータ一式が欲しい場合に非常に便利です。
comparator
は、生成されたデータが、データリストに既に存在するかどうかを判断するために使用します。
デフォルトでは、新しく生成されたデータが配列内にあるかどうかを確認するだけです。 これは単純なケース(sate()
等)であれば正常に動作しますが、 生成されたデータがオブジェクトの場合は機能しません。 (Array.prototype.indexOf()
メソッドが、オブジェクトでは機能せず、 同じオブジェクトへの参照ではない限り、2つのオブジェクトが厳密に等しくないためです。)
chance.unique(chance.currency, 2, {
comparator: function(err, val) {
return arr.reduce(function(acc, item) {
return acc || (item.code === val.code);
}, false);
}
});
=> [{ code: "KYF", name: "Cayman Islands Dollar" }, { code: "CDF", name: "Congo/Kinshasa Franc" }]
任意の関数に渡すオプションは、数値(生成する個数)の後に指定することができます。
例えば、0
~100
までの10個のユニークな数字を取得する場合、integer()
を指定して、 取得したい個数10
、min
/max
を指定することで、簡単に実現できます。
chance.unique(chance.integer, 10, {min: 0, max: 100});
=> [78, 49, 7, 87, 59, 89, 84, 62, 60, 63]
ユニークな数値を生成することができない場合があります。 例えば、上記のようにランダム関数としてstate()
を指定し、55
個のユニークな値を取得したい場合、 ChanceはRangeError
をスローします。 これは利用可能なプール(州名リスト:50州 + コロンビア特別区)には51
個のデータしか無く、 55
個のユニークな値を取得するのは不可能であるためです。
chance.unique(chance.state, 55);
=> RangeError: Chance: num is likely too large for sample set
デモ
ボタンを押すと、5色の色名配列からランダムでユニークな3つの名前を表示します。
JavaScript
var button = document.getElementById('get-result');
button.addEventListener('click', function() {
var chance = new Chance(),
colors = ['red', 'blue', 'green', 'black', 'white'],
unique = chance.unique(chance.pickone, 3, colors),
result = document.getElementById('result'),
ul, li;
ul = document.createElement('ul');
for (var i = 0; i < unique.length; i++) {
li = document.createElement('li');
li.textContent = unique[i];
ul.appendChild(li);
}
if (result.firstChild !== null) {
result.removeChild(result.firstChild);
}
result.appendChild(ul);
}, 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ドキュメントを翻訳/改変したものです。