提问人:Michael Monaghan 提问时间:7/25/2023 最后编辑:BarmarMichael Monaghan 更新时间:7/25/2023 访问量:40
运行 for 循环,直到满足条件但不需要迭代器
Running a for loop until a condition is met but no iterator needed
问:
我对此还是新手,所以请原谅缺乏知识和可能糟糕的语法。我确实在寻找答案,但我缺乏找到它的词汇。
这是我的代码:
const pAequorFactory = (uniqueNumber, dnaArray) => {
return {
specieNum: uniqueNumber,
_dna: dnaArray,
mutate () {
const randBaseNum = Math.floor(Math.random() * this._dna.length);
for (let i = 0; this._dna[randBaseNum] !== returnRandBase(); i++) {
this._dna[randBaseNum] = returnRandBase();
}
}
}
}
我编写了一个工厂函数,它接受一个唯一的数字和一个 15 个字符串(DNA 碱基)的数组并创建一个对象。提醒您,有 4 个 DNA 碱基 - A、T、C 和 G。该方法应该在数组中选择一个随机的碱基(项目),并将其更改为不同的碱基(它不能保持不变)。mutate()
我的问题:我不确定如何在当前基数和随机基数之间进行比较,直到它们不匹配,然后将当前基数设置为不匹配的随机基数。代码本身只会不断重置基础,无论它是否不同。
我查看了陈述,并考虑了这样的事情:while
mutate () {
const randBaseNum = Math.floor(Math.random() * this._dna.length);
let baseToMutate = this._dna[randBaseNum];
while (baseToMutate === this._dna[randBaseNum]) {
baseToMutate = returnRandBase();
}
this._dna[randBaseNum] = baseToMutate;
}
这似乎在经过 100 次迭代并手动审查每次迭代后才起作用。
有更好的方法吗?我感觉我错过了什么。
此外,非常感谢任何语法更正或代码识别。
答:
0赞
Barmar
7/25/2023
#1
更改您的函数,使其作为参数。该函数应返回除此以外的随机基数。这可以通过从要选择的碱基数组中删除参数来轻松完成。returnRandBase()
baseToMutate
function returnRandBase(base) {
const bases = ['A', 'T', 'C', 'G'];
const index = bases.indexOf(base);
bases.splice(index, 1);
return bases[floor(Math.random() * bases.length)];
}
mutate() {
const randBaseNum = Math.floor(Math.random() * this._dna.length);
let baseToMutate = this._dna[randBaseNum];
this._dna[randBaseNum] = returnRandBase(baseToMutate);
}
评论