JavaScript生成-x到x区间随机整数有没有更优雅的实现方案?
你原有实现存在两个可优化点:一是两次调用Math.random()存在冗余,高频调用时性能略差;二是生成的结果不包含0,若需要完整的[-x, x]区间整数会有逻辑遗漏。以下分两种常见场景给出更简洁的实现:
场景1:生成包含0的[-x, x]区间随机整数(通用场景)
仅需一次随机数调用即可完成,代码更简洁、性能更优:
function randomInt(nb) { return Math.floor(Math.random() * (2 * nb + 1)) - nb; } console.log(randomInt(4))
逻辑说明:Math.random() * (2 * nb + 1) 生成[0, 2nb+1)区间的浮点数,向下取整后得到0到2nb的整数,减去nb后刚好映射为[-nb, nb]范围内的所有整数。
场景2:生成不包含0的随机数(和你原有代码逻辑一致)
如果你的业务场景不需要0,也可以简化为如下写法,去掉冗余的中间变量:
function randomInt(nb) { return Math.ceil(Math.random() * nb) * (Math.random() > 0.5 ? -1 : 1); } console.log(randomInt(4))
内容的提问来源于stack exchange,提问作者Jip Helsen
相关产品推荐
相关产品推荐

