Javascript 循环和数组
这段代码应该创建20个数组,每个数组具有不同的突变,并将这20个数组存储在另一个数组“突变”中。问题是,它的输出Javascript 循环和数组,javascript,arrays,loops,Javascript,Arrays,Loops,这段代码应该创建20个数组,每个数组具有不同的突变,并将这20个数组存储在另一个数组“突变”中。问题是,它的输出 [ [ 0, 2, 3, 4, 5, 6, 7, 8, 9 ], [ 0, 2, 3, 4, 5, 6, 7, 8, 9 ], [ 0, 2, 3, 4, 5, 6, 7, 8, 9 ], [ 0, 2, 3, 4, 5, 6, 7, 8, 9 ], [ 0, 2, 3, 4, 5, 6, 7, 8, 9 ], [ 0, 2, 3, 4, 5, 6, 7, 8,
[ [ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 0, 2, 3, 4, 5, 6, 7, 8, 9 ] ]
换句话说,它只更改一个数字,然后将该数字重复更改20次。如果可能的话,我想让每次迭代都存储变异,然后后续迭代建立在数组的初始变异的基础上。像这样:
[0,2,3,4,5,6,7,8,9]
->[0,2,3,4,6,6,6,7,8,9]
->[0,1,3,4,6,6,7,8,9]
-这样你就可以看到每次都有细微的变化
以下是目前的代码:
function concestor2() {
this.genome = [1, 2, 3, 4, 5, 6, 7, 8, 9]; // the code to be scrambled
this.replicability = 10;
}
var venutian = new concestor2();
venutian.scramble = parseInt(Math.random() * 10); //picks random number 1-10
venutian.scramble2 = venutian.scramble;
function scrambler(P1) {
for (var i = 0; i <= 20; ++i) {
P1.genome[P1.scramble] = P1.scramble2; //selects random element of array
}
return P1.genome;
}
scrambler(venutian);
var mutations = []; // array to store the 20 mutations from the loop
function createVariables() {
for (var j = 0; j <= 20; ++j) {
mutations[j] = scrambler(venutian);
}
return mutations;
}
createVariables();
console.log(venutian.genome)
console.log(mutations)
函数concestor2(){
this.genome=[1,2,3,4,5,6,7,8,9];//要加扰的代码
这是可复制性=10;
}
var venutian=新concestor2();
venutian.scramble=parseInt(Math.random()*10)//选择随机数1-10
venutian.scramble 2=venutian.scramble;
功能扰码器(P1){
对于(var i=0;i为什么扰码和扰码2具有完全相同的值?您不想使用两个不同的随机数吗?此外,您可能希望在每次调用扰码器时创建新的随机数。
createVariables可能应该是这样的
function createVariables() {
mutations[0] = scrambler(venutian);
for (var j = 1; j <= 20; ++j) {
mutations[j] = scrambler(mutations[j-1]);
}
return mutations;
}
函数createVariables(){
突变[0]=扰频器(维努蒂安);
对于(var j=1;j也许是这样的
Javascript
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
function getMutations(obj) {
var mutations = [],
last = obj.genome.length - 1,
mutation,
count,
value,
pos;
for (count = 0; count <= 20; count += 1) {
pos = getRandomInt(0, last);
mutation = obj.genome.slice();
mutation[pos] = getRandomInt(0, 9);
mutations.push(mutation);
}
return mutations;
}
function concestor2() {
this.genome = [1, 2, 3, 4, 5, 6, 7, 8, 9]; // the code to be scrambled
this.replicability = 10;
}
var venutian = new concestor2();
console.log(getMutations(venutian));
在上,你说得对。在我分配任务之前,我没有想过当你说每次创建新的随机数时,你的意思是我应该在扰码器循环中创建随机数吗?因为主要问题只是第一个随机分配的重复迭代。你能澄清一下,每个变异都是在原始的上执行的吗是.genome
还是上一个“突变”?你的话似乎暗示了原文,但你的例子暗示了上一个?也是你的“随机”选择一个介于0和9之间的数字,而不是1和10。这个基因组只是一个每次都会发生突变的虚拟。重要的部分是将每个突变的结果记录到“突变”数组中。随机数是不相关的,但我想感谢你指出了这一点。我一直在更改代码并得到奇怪的结果,但从来没有得到我想要的我很聪明,很接近我要找的。我会从这里调整它,看看它会去哪里
[
[6, 2, 3, 4, 5, 6, 7, 8, 9],
[1, 2, 3, 4, 5, 7, 7, 8, 9],
[1, 2, 1, 4, 5, 6, 7, 8, 9],
[1, 2, 3, 4, 5, 7, 7, 8, 9],
[1, 2, 3, 4, 5, 6, 7, 3, 9],
[1, 2, 3, 4, 5, 6, 7, 3, 9],
[1, 2, 3, 4, 3, 6, 7, 8, 9],
[1, 2, 3, 4, 5, 6, 7, 0, 9],
[1, 2, 5, 4, 5, 6, 7, 8, 9],
[1, 2, 5, 4, 5, 6, 7, 8, 9],
[1, 2, 3, 4, 5, 6, 1, 8, 9],
[1, 2, 3, 4, 5, 3, 7, 8, 9],
[1, 2, 3, 7, 5, 6, 7, 8, 9],
[1, 2, 3, 4, 2, 6, 7, 8, 9],
[5, 2, 3, 4, 5, 6, 7, 8, 9],
[7, 2, 3, 4, 5, 6, 7, 8, 9],
[1, 2, 5, 4, 5, 6, 7, 8, 9],
[1, 2, 4, 4, 5, 6, 7, 8, 9],
[1, 2, 3, 4, 0, 6, 7, 8, 9],
[1, 2, 3, 5, 5, 6, 7, 8, 9],
[1, 4, 3, 4, 5, 6, 7, 8, 9]
]