如何为NPM包中的RNG添加长度控制以生成指定长度数字字符串?
当然可行!我来帮你修复代码问题
首先肯定你的需求完全没问题,咱们先拆解下你现有代码里导致返回NaN/undefined的问题:
- 你重复声明了
var size,这会导致变量覆盖,而且var的变量提升特性可能带来意外问题 newToken是单个随机数字,你试图用newToken[size]去访问它的"索引"——但数字不是数组或字符串,这样的访问只会得到undefined,最终返回的自然就是无效值了
接下来是修正后的完整代码,我还加了参数合法性检查来避免无效输入:
module.exports = function token(min, max, size) { // 设置size的默认值为128,用const避免变量意外修改 const targetSize = size || 128; // 先做参数校验,防止用户传入无效值 if (typeof min !== 'number' || typeof max !== 'number' || min > max) { throw new Error('min 和 max 必须是数字,且 min 不能大于 max'); } if (!Number.isInteger(targetSize) || targetSize <= 0) { throw new Error('size 必须是正整数'); } let result = ''; // 循环targetSize次,每次生成一个范围内的随机数并拼接到结果字符串 for (let i = 0; i < targetSize; i++) { const randomNum = Math.floor(Math.random() * (max - min + 1)) + min; result += randomNum.toString(); } return result; };
代码说明:
- 用
const声明targetSize替代重复的var,避免变量污染 - 新增参数校验:确保min/max是合法数字,size是正整数,避免后续逻辑出错
- 通过循环
targetSize次,每次生成一个指定范围的随机数,转成字符串后拼接到结果里,最终得到你需要的指定长度的数字字符串
测试示例:
当你调用token(0, 21, 23)时,会生成类似"10215371901218461159207"这样的23位字符串(每次运行结果都是随机的),完全符合你的需求。
内容的提问来源于stack exchange,提问作者andremont0101
相关产品推荐
相关产品推荐

