JS中如何将随机生成的数组保存为对象属性并保持固定值?
问题分析与解决方案
问题根源
每次运行代码时,Math.random()会生成全新的随机数序列,导致mockUpStrand()每次调用都会生成不同的DNA数组,最终ex1._dna的值每次运行都不一样。
两种解决方案
方案一:固定随机数种子
实现带种子的伪随机数生成器,固定种子后,每次运行生成的随机序列完全一致,从而得到固定的DNA数组。
修改后的代码:
// 带种子的伪随机数生成器(线性同余算法) function seededRandom(seed) { let internalSeed = seed % 2147483647; if (internalSeed <= 0) internalSeed += 2147483646; return function() { internalSeed = internalSeed * 16807 % 2147483647; return (internalSeed - 1) / 2147483646; }; } // 固定种子值,可替换为任意整数生成不同固定序列 const getRandom = seededRandom(123); const returnRandBase = () => { const dnaBases = ['A', 'T', 'C', 'G'] // 使用带种子的随机数替代Math.random() return dnaBases[Math.floor(getRandom() * 4)] } const mockUpStrand = () => { const newStrand = [] for (let i = 0; i < 15; i++) { newStrand.push(returnRandBase()) } return newStrand } const pAequorFactory = (num, arr) => { return { _specimenNum: num, _dna: arr } } const ex1 = pAequorFactory(1, mockUpStrand()); console.log(JSON.stringify(ex1._dna));
方案二:直接使用固定的DNA数组
如果已经确定需要的DNA序列,直接将其定义为常量传入工厂函数,最简单直接:
// 预先定义好的固定DNA数组 const fixedDna = ['G', 'C', 'T', 'T', 'A', 'G', 'A', 'C', 'C', 'T', 'T', 'T', 'G', 'C', 'A']; const pAequorFactory = (num, arr) => { return { _specimenNum: num, _dna: arr } } const ex1 = pAequorFactory(1, fixedDna); console.log(JSON.stringify(ex1._dna));
内容的提问来源于stack exchange,提问作者cmarie
相关产品推荐
相关产品推荐

