优化JS随机数生成,确保无负数的技巧
本文介绍如何优化JavaScript随机数生成算法,避免出现负数。原算法在根据数组元素属性值分配随机数时,由于步长计算不准确导致溢出,产生负数。优化后的算法通过调整步长计算方式,采用下取整运算符`| 0`,并每次迭代递减总数和计数器,确保步长在剩余总数中平均分配,从而有效避免负数的产生,最终实现根据总数精准生成随机数的功能。 文章详细分析了问题根源,并提供了改进后的代码和详细解释,确保生成的随机数始终在合理范围内。
根据总数生成随机数的javascript实现优化
本文将探讨如何根据一个给定的总数,结合已有的数据结构,生成一系列随机数,并对原代码中出现的负数问题进行优化。 问题源于需要根据数组arr中每个对象的test属性值(表示数据列数),生成一定数量(总数为29)的随机数,并将其分配到对应的列中。原代码在处理总数分配时出现溢出,导致部分随机数出现负值。
原代码的核心问题在于对value的更新方式。 if(num < value + step){value = num} 这段代码在计算value时,直接将其赋值为num,这导致了在最后几列分配时,步长step的计算不再准确,最终导致value超过num,从而生成负数。
改进后的代码通过调整步长step的计算方式,避免了这个问题。 新的代码采用了下取整运算符| 0 来计算step,并每次迭代都递减count以及num,确保step在剩余总数中平均分配。 这样,在每个迭代中,step都会根据剩余总数进行调整,避免了之前代码中由于value的提前截断而造成的分配不均问题。
以下是优化后的代码:
function filterate(list, num = 29) {
let data = list.map((item, index) => {
return Array.from({length: Number(item.test)}).map(citem => {
return {
min: 0,
max: 0,
num: 0,
}
})
})
let max = Math.max(...list.map(i => Number(i.test)));
let value = 0;
let current = 1;
let count = list.reduce((n, i) => n + Number(i.test), 0)
for (let index = 0; index < max; index++) {
data.forEach((item, k) => {
if(item[index]){
let step = num / count | 0 // 下取整
count-- //循环计算step,确保step在剩下的始祖中平均分配
num-=step
item[index].min = value + 1
value += step
item[index].max = value
item[index].num= Math.floor(Math.random() * (item[index].max - item[index].min + 1)) + item[index].min
}
})
}
return data;
}通过这种改进,确保了每个随机数的范围都在合理的区间内,避免了负数的产生,更有效地解决了根据总数生成随机数的问题。
以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。
DebianStrings安装配置全攻略
- 上一篇
- DebianStrings安装配置全攻略
- 下一篇
- 苹果电脑浏览器背景色差原因揭秘
-
- 文章 · 前端 | 7分钟前 |
- 原始值包装对象与普通对象的区别
- 247浏览 收藏
-
- 文章 · 前端 | 10分钟前 |
- noframes标签作用及使用方法详解
- 440浏览 收藏
-
- 文章 · 前端 | 13分钟前 |
- JavaScript性能监控与页面加载时间测量方法
- 378浏览 收藏
-
- 文章 · 前端 | 16分钟前 |
- ES6模块与CommonJS对比解析
- 214浏览 收藏
-
- 文章 · 前端 | 17分钟前 |
- localStorage与sessionStorage区别详解
- 108浏览 收藏
-
- 文章 · 前端 | 20分钟前 |
- CSS等比缩放技巧:用padding-top实现比例盒子
- 460浏览 收藏
-
- 文章 · 前端 | 20分钟前 |
- SCSS为何适合大型项目?工程化优势解析
- 319浏览 收藏
-
- 文章 · 前端 | 21分钟前 |
- CSS实现横向标签滑动效果
- 268浏览 收藏
-
- 文章 · 前端 | 32分钟前 |
- HTML与CSS如何协同工作?
- 130浏览 收藏
-
- 文章 · 前端 | 34分钟前 |
- HTML空格符号怎么打_数据渲染后空格丢失怎么补救
- 419浏览 收藏

