unique()

更新日: 2018-09-04

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" }]

任意の関数に渡すオプションは、数値(生成する個数)の後に指定することができます。

例えば、0100までの10個のユニークな数字を取得する場合、integer()を指定して、 取得したい個数10min/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ドキュメントを翻訳/改変したものです。