Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阵列突变_Javascript_Arrays_Loops_Methods - Fatal编程技术网

Javascript 阵列突变

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;

由于某些原因,我无法使下面的代码按预期工作

我已经声明了带有随机15个元素的可变dna,每个元素都是来自数组dna的随机字母

Mutate函数应该使用随机的15个元素创建新的(类似的数组),但第一个数组中的元素不能重复。相反,它们应该被dnaBases数组中剩余的三个元素替换

我的代码中的问题是,有时字母会重复,即使在以前的情况下字母不会重复

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()