TASK 4:
Your team wants you to simulate P. aequor‘s high rate of mutation (change in its DNA).
To simulate a mutation, in pAequorFactory()
‘s returned object, add the method .mutate()
.
.mutate()
is responsible for randomly selecting a base in the object’s dna
property and changing the current base to a different base. Then .mutate()
will return the object’s dna
.
For example, if the randomly selected base is the 1st base and it is 'A'
, the base must be changed to 'T'
, 'C'
, or 'G'
. But it cannot be 'A'
again.
const returnRandBase = () => {
const dnaBases = ["A", "T", "C", "G"];
return dnaBases[Math.floor(Math.random() * 4)];
};
// Returns a random single strand of DNA containing 15 bases
const mockUpStrand = () => {
const newStrand = [];
for (let i = 0; i < 15; i++) {
newStrand.push(returnRandBase());
}
return newStrand;
};
const pAequorFactory = (number, array) => {
return {
specimenNum: number,
dna: array,
mutate() {
let dnaBases = ["A", "T", "C", "G"];
let newDnaBases = [];
let newChar = "";
let i = Math.floor(Math.random() * 14); //spawn position 'i' need to be changed
console.log('index neet to mutate: ' + i);
console.log('current dna base is: ' + this.dna[i]);
newDnaBases = dnaBases.filter((element) => element !== this.dna[i]);
//console.log(newDnaBases);
newChar = newDnaBases[Math.floor(Math.random() * 3)];
console.log('new dna base is: ' + newChar);
array.fill(newChar, i, i + 1); //change the specific position's dna base to newchar, which is randomly choose from newDnaBases without the same as it before change;
console.log(this.dna);
},
};
};
console.log(pAequorFactory(1, mockUpStrand()));
const a = pAequorFactory(1, mockUpStrand())
a.mutate();
there are some problem i meet need someone’s guide through
- the biggest problem is that
dna: array
is randomly spawn, when i second invock try to change it’s specific position’s dna base, it will change whole dna
value in mutate function, i don’t know how to make this varible keep the value outside equal to inside.
2.when i console.log the pAequorFactory function using two parameters, the third object mutate
didn accept anv parameter, and it show mutate: [Function: mutate]
,is that normal?
For #1, can you provide an example of what you want to happen vs what’s happening?