我想找到 100 以下的最长的 collatz 序列,这段代码输出 2,这不是答案。当我观察变量时,每当 .push() 函数向 testary 添加一些内容时,它也会添加到 maxary 中。为什么它要在两者的末尾添加一个值?
var n;
var m;
var testary = [];
var maxary = [];
var max;
for(i=2;i<100;i++){
n = i;
m = i;
while(n>1){
if(n%2 == 0){
testary.push(n);
n = n/2;
} else if(n%2 != 0){
testary.push(n);
n = (3*n)+1;
}
if(testary.length>maxary.length){
maxary = testary;
max = m;
}
}}
最佳答案
当您分配maxary = testary
时,它会将testary的引用分配给maxary,每当您尝试使用push向其中任何一个添加项目时,它都会影响两个数组,因为值在以下位置更改javascript 中的引用
您可以在分配之前使用 spread syntax
克隆数组
var n;
var m;
var testary = [];
var maxary = [];
var max;
for(i=2;i<100;i++){
n = i;
m = i;
while(n>1){
if(n%2 == 0){
testary.push(n);
n = n/2;
} else if(n%2 != 0){
testary.push(n);
n = (3*n)+1;
}
if(testary.length>maxary.length){
maxary = [...testary]; // clone the array
max = m;
}
}}
关于javascript .push() 添加到两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61853011/