javascript - 查找表格和整数范围 - javascript
问题描述
所以我正在寻找创建查找表。但是,我遇到了整数范围的问题,而不仅仅是 1、2、3 等。这就是我所拥有的:
var ancient = 1;
var legendary = 19;
var epic = 251;
var rare = 1000;
var uncommon = 25000;
var common = 74629;
var poolTotal = ancient + legendary + epic + rare + uncommon + common;
var pool = general.rand(1, poolTotal);
var lootPool = {
1: function () {
return console.log("Ancient");
},
2-19: function () {
}
};
当然我知道2-19
这行不通,但我已经尝试过其他的东西,比如 [2-19] 等等。
好的,所以有更多信息:当我打电话时:lootPool[pool]();
它将选择一个介于 1 和之间的整数,具体poolTotal
取决于它是否1
会在控制台中记录为古代。如果它在范围内命中,2 through 19
那将是传奇。依此类推我的号码。
编辑:我很清楚我可以通过开关轻松做到这一点,但我想以这种方式尝试。
解决方案
与其制作一个巨大的查找表(这很有可能,但非常不优雅),我建议制作一个(小)对象,选择一个随机数,然后在对象中找到值大于随机数的第一个条目数字:
// baseLootWeight: weights are proportional to each other
const baseLootWeight = {
ancient: 1,
legendary: 19,
epic: 251,
rare: 1000,
uncommon: 25000,
common: 74629,
};
let totalWeightSoFar = 0;
// lootWeight: weights are proportional to the total weight
const lootWeight = Object.entries(baseLootWeight).map(([rarity, weight]) => {
totalWeightSoFar += weight;
return { rarity, weight: totalWeightSoFar };
});
console.log(lootWeight);
const randomType = () => {
const rand = Math.floor(Math.random() * totalWeightSoFar);
return lootWeight
.find(({ rarity, weight }) => weight >= rand)
.rarity;
};
for (let i = 0; i < 10; i++) console.log(randomType());
推荐阅读
- python - 如何使用 skimage 和 numpy 显示和保存输出图像?
- angular - 如果用户离开组件,如何取消 Observable?
- memory-management - 如何估计 freeRTOS 的内存需求
- php - PHP 警告:ftp_fput():无法打开该文件:是一个目录
- c# - 使用 C# 正则表达式从字符串中提取数字
- python - 日志记录和记录器导出日志有什么区别?
- python-3.x - 如何通过在python的类中调用函数来获取函数的结果
- node.js - 错误:找不到指定的模块。\\?\C:\Program Files\nodejs\tf\node_modules\@tensorflow\tfjs-node\lib\napi-v5\tf js_binding.node
- android - 如何在颤动中更改android图标?
- c# - 在winforms c#中显示来自sql数据库的图像