当前位置:首页 > 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("未触发");
}

权重随机选择

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

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

实际应用示例

抽奖系统实现

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

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

游戏暴击率计算

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

js实现几率

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实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…