weighted
// 用法
randBox.weighted(['a', 'b'], [100, 1])
randBox.weighted(['a', 'b', 'c', 'd'], [1, 2, 3, 4])
提供一个项目数组,以及另一个指定相对权重的项目数组,RandBox 将选择其中一个项目,遵守指定的权重。
例如,以下代码:
randBox.weighted(['a', 'b'], [100, 1]);
=> 'a'
将生成 'a'
的频率是 'b'
的 100 倍,但仍然随机选择其中之一。
权重都是相对的,所以如果您有超过两个项目,它将确保所有项目都相对于所有权重生成。
例如,以下代码:
randBox.weighted(['a', 'b', 'c', 'd'], [1, 2, 3, 4]);
=> 'c'
将从数组中生成一个字母,但将选择 'b'
的频率是选择 'a'
的两倍,将选择 'c'
的频率是选择 'a'
的三倍,将选择 'd'
的频率是选择 'a'
的四倍,将选择 'd'
的频率是选择 'b'
的两倍。
权重可以是如上所示的整数或分数。
randBox.weighted(['a', 'b', 'c', 'd'], [0.1, 0.2, 0.3, 0.4]);
=> 'd'
权重不需要总和为任何特定值,它们都是相对比较的,所以以下所有都是等价的:
randBox.weighted(['a', 'b', 'c', 'd'], [1, 2, 3, 4]);
randBox.weighted(['a', 'b', 'c', 'd'], [0.1, 0.2, 0.3, 0.4]);
randBox.weighted(['a', 'b', 'c', 'd'], [100, 200, 300, 400]);
randBox.weighted(['a', 'b', 'c', 'd'], [17, 34, 51, 68]);
randBox.weighted(['a', 'b', 'c', 'd'], [0.17, 0.34, 0.51, 0.68]);
记住 JavaScript 有一等函数,所以您可以执行以下操作:
randBox.weighted([randBox.fbid, randBox.twitter, randBox.ip], [10, 5, 1])();
=> 10000345166213
这将以指定的相对权重选择其中一个 RandBox 方法,然后立即调用它,所以它将返回随机 fbid 的频率是返回 twitter 句柄的两倍(因为 10/5 是 2),返回 fbid 的频率是返回随机 ip 地址的 10 倍(因为 10/1 是 10)。它将返回随机 twitter 句柄的频率是返回 ip 地址的 5 倍(因为 5/1 是 5)。
最后更新于: