Javascript 阵列突变
由于某些原因,我无法使下面的代码按预期工作 我已经声明了带有随机15个元素的可变dna,每个元素都是来自数组dna的随机字母 Mutate函数应该使用随机的15个元素创建新的(类似的数组),但第一个数组中的元素不能重复。相反,它们应该被dnaBases数组中剩余的三个元素替换 我的代码中的问题是,有时字母会重复,即使在以前的情况下字母不会重复Javascript 阵列突变,javascript,arrays,loops,methods,Javascript,Arrays,Loops,Methods,由于某些原因,我无法使下面的代码按预期工作 我已经声明了带有随机15个元素的可变dna,每个元素都是来自数组dna的随机字母 Mutate函数应该使用随机的15个元素创建新的(类似的数组),但第一个数组中的元素不能重复。相反,它们应该被dnaBases数组中剩余的三个元素替换 我的代码中的问题是,有时字母会重复,即使在以前的情况下字母不会重复 const dnaBases = ['A', 'T', 'C', 'G'] var dna = [] for (let i = 0; i < 15;
const dnaBases = ['A', 'T', 'C', 'G']
var dna = []
for (let i = 0; i < 15; i++) {
dna.push(dnaBases[Math.floor(Math.random() * 4)])
}
function mutate() {
console.log(dna) // to check newly generated dna array
var tmp = []
var newDnaBases = ['A', 'T', 'C', 'G']
for (var j = 0; j < 15; j++) {
tmp.push(newDnaBases[Math.floor(Math.random() * 4)]);
}
console.log(tmp) // to check newly generated tmp array
for (var k = 0; k < tmp.length; k++) {
var randomIndex = Math.floor(Math.random() * 3);
if (tmp[k] === dna[k]) {
var x = newDnaBases.splice(tmp[k], 1);
tmp[k] = newDnaBases[randomIndex];
newDnaBases.push(x.toString());
}
}
console.log(tmp) // to see how tmp has changed after for loop
console.log(newDnaBases) // to check if newDnaBases is not corrupted
}
mutate()
const dnaBases=['A','T','C','G']
var dna=[]
for(设i=0;i<15;i++){
dna.push(dnaBases[Math.floor(Math.random()*4)])
}
函数mutate(){
console.log(dna)//检查新生成的dna数组
var tmp=[]
var newDnaBases=['A','T','C','G']
对于(var j=0;j<15;j++){
tmp.push(newDnaBases[Math.floor(Math.random()*4)];
}
console.log(tmp)//检查新生成的tmp数组
对于(var k=0;k
我是Javascript新手,一眼就看不出问题所在
非常感谢 在js中,使用split、slice和reduce等数组方法返回数组变量的“克隆”,并对该方法进行更改。 像 因此,在您的代码中:
const dnaBases = ['A', 'T', 'C', 'G']
var dna = []
for (let i = 0; i < 15; i++) {
dna.push(dnaBases[Math.floor(Math.random() * 4)])
}
function mutate() {
console.log(dna)
var tmp = []
var newDnaBases = ['A', 'T', 'C', 'G']
for (var j = 0; j < 15; j++) {
tmp.push(newDnaBases[Math.floor(Math.random() * 4)]);
}
console.log(tmp) // to check newly generated tmp array
for (var k = 0; k < tmp.length; k++) {
var randomIndex = Math.floor(Math.random() * 3);
if (tmp[k] === dna[k]) {
var x = newDnaBases.filter(i=> i!== tmp[k]) //returns the array without the repeated item, without altering the original variable
tmp[k] = x[Math.floor(Math.random() * 2)];
}
}
console.log(tmp)
console.log(newDnaBases)
}
mutate()
const dnaBases=['A','T','C','G']
var dna=[]
for(设i=0;i<15;i++){
dna.push(dnaBases[Math.floor(Math.random()*4)])
}
函数mutate(){
控制台日志(dna)
var tmp=[]
var newDnaBases=['A','T','C','G']
对于(var j=0;j<15;j++){
tmp.push(newDnaBases[Math.floor(Math.random()*4)];
}
console.log(tmp)//检查新生成的tmp数组
对于(var k=0;ki!==tmp[k])//返回不带重复项的数组,而不改变原始变量
tmp[k]=x[Math.floor(Math.random()*2)];
}
}
console.log(tmp)
console.log(新数据库)
}
突变
谢谢,我完全忘记了过滤方法。不客气,顺便说一句,如果您正在处理大量数据(真实dna值),我建议您使用,“数组变量”。forEach((value,index,orgArray)=>{/*function here*/})
,因为它是异步工作的,这样您的代码会更优化
const dnaBases = ['A', 'T', 'C', 'G']
var dna = []
for (let i = 0; i < 15; i++) {
dna.push(dnaBases[Math.floor(Math.random() * 4)])
}
function mutate() {
console.log(dna)
var tmp = []
var newDnaBases = ['A', 'T', 'C', 'G']
for (var j = 0; j < 15; j++) {
tmp.push(newDnaBases[Math.floor(Math.random() * 4)]);
}
console.log(tmp) // to check newly generated tmp array
for (var k = 0; k < tmp.length; k++) {
var randomIndex = Math.floor(Math.random() * 3);
if (tmp[k] === dna[k]) {
var x = newDnaBases.filter(i=> i!== tmp[k]) //returns the array without the repeated item, without altering the original variable
tmp[k] = x[Math.floor(Math.random() * 2)];
}
}
console.log(tmp)
console.log(newDnaBases)
}
mutate()