当前位置:首页 > JavaScript

js实现几率

2026-02-01 03:10:35JavaScript

实现随机几率的方法

在JavaScript中实现随机几率可以通过多种方式完成,具体取决于需求场景。以下是几种常见的方法:

Math.random()基础方法

使用Math.random()生成一个0到1之间的随机数,通过判断该随机数是否落在指定范围内实现几率控制:

const probability = 0.3; // 30%几率
if (Math.random() < probability) {
    console.log("触发成功");
} else {
    console.log("未触发");
}

权重随机选择

当需要从多个选项中以不同几率随机选择时,可以使用权重系统:

js实现几率

const options = [
    { item: "A", weight: 0.1 },
    { item: "B", weight: 0.3 },
    { item: "C", weight: 0.6 }
];

function weightedRandom(options) {
    const random = Math.random();
    let sum = 0;
    for (const option of options) {
        sum += option.weight;
        if (random <= sum) return option.item;
    }
    return options[options.length-1].item;
}

console.log(weightedRandom(options));

正态分布随机

使用Box-Muller变换生成符合正态分布的随机数:

function normalRandom(mean=0, stdev=1) {
    const u = 1 - Math.random();
    const v = Math.random();
    const z = Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v);
    return z * stdev + mean;
}

console.log(normalRandom(100, 15));

实际应用示例

抽奖系统实现

js实现几率

构建一个简单的抽奖系统,不同奖品有不同的中奖几率:

const prizes = [
    { name: "一等奖", chance: 0.01 },
    { name: "二等奖", chance: 0.05 },
    { name: "三等奖", chance: 0.1 },
    { name: "参与奖", chance: 0.84 }
];

function drawPrize(prizes) {
    const random = Math.random();
    let cumulative = 0;
    for (const prize of prizes) {
        cumulative += prize.chance;
        if (random <= cumulative) return prize.name;
    }
    return "未中奖";
}

console.log(drawPrize(prizes));

游戏暴击率计算

游戏中暴击几率的实现可以结合伪随机分布,避免连续暴击或长期不暴击:

let pseudoRandomCounter = 0;
const baseCritChance = 0.2;

function getCrit() {
    pseudoRandomCounter++;
    const actualChance = baseCritChance * pseudoRandomCounter;
    if (Math.random() < actualChance) {
        pseudoRandomCounter = 0;
        return true;
    }
    return false;
}

注意事项

  • 确保所有几率的和为1(100%),否则可能导致意外结果
  • 对于高精度需求,考虑使用更专业的随机数生成库
  • 在安全敏感场景避免使用Math.random(),改用crypto.getRandomValues()
  • 测试时使用大量样本验证实际分布是否符合预期

标签: 几率js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…