Skip to Content
🎲 欢迎使用 RandBox - 功能强大的 JavaScript 随机数据生成库! 了解详情

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)。

最后更新于: