js实现几率
在JavaScript中实现概率(几率)相关功能,通常涉及随机数生成、权重计算或概率分布。以下是几种常见实现方法:
基础随机概率
使用Math.random()生成0到1之间的随机数,与设定的概率阈值比较:

function checkProbability(probability) {
return Math.random() < probability;
}
// 示例:50%概率返回true
const result = checkProbability(0.5);
加权随机选择
从数组中按权重随机选择元素:

function weightedRandom(items, weights) {
const totalWeight = weights.reduce((acc, w) => acc + w, 0);
const random = Math.random() * totalWeight;
let weightSum = 0;
for (let i = 0; i < items.length; i++) {
weightSum += weights[i];
if (random <= weightSum) return items[i];
}
}
// 示例:A有70%概率,B有30%概率
const choice = weightedRandom(['A', 'B'], [0.7, 0.3]);
概率分布函数
实现正态分布(高斯分布)随机数:
function normalDistribution(mean = 0, stdDev = 1) {
let u = 0, v = 0;
while (u === 0) u = Math.random();
while (v === 0) v = Math.random();
return mean + stdDev * Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v);
}
// 示例:生成均值为0,标准差为1的随机数
const gaussianValue = normalDistribution();
蒙特卡洛模拟
通过大量随机采样估算概率:
function monteCarloSimulation(trials, experiment) {
let successes = 0;
for (let i = 0; i < trials; i++) {
if (experiment()) successes++;
}
return successes / trials;
}
// 示例:模拟硬币正面概率
const headsProbability = monteCarloSimulation(10000, () => Math.random() < 0.5);
注意事项
Math.random()不适合加密场景,需使用crypto.getRandomValues()替代- 浮点数比较可能存在精度问题,建议使用容差比较
- 复杂概率模型可考虑使用概率库如
probability.js或jstat






