运行 for 循环,直到满足条件但不需要迭代器

Running a for loop until a condition is met but no iterator needed

提问人:Michael Monaghan 提问时间:7/25/2023 最后编辑:BarmarMichael Monaghan 更新时间:7/25/2023 访问量:40

问:

我对此还是新手,所以请原谅缺乏知识和可能糟糕的语法。我确实在寻找答案,但我缺乏找到它的词汇。

这是我的代码:

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 次迭代并手动审查每次迭代后才起作用。

有更好的方法吗?我感觉我错过了什么。

此外,非常感谢任何语法更正或代码识别。

JavaScript 循环 while 循环

评论


答:

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);
}