javascrip .push()添加到两个数组中

问题描述 投票:1回答:2

我想找到最长的collat​​z序列序列,该序列在100以下,并且此代码输出2,这不是答案。当我观察变量时,每当.push()函数将某些内容添加到睾丸中时,它也会添加到最大值中。为什么要在两者的末尾添加一个值?

    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;
    }
}}
javascript arrays push
2个回答
2
投票

[当您分配maxary = testary时,它会将testary的引用分配给maxary,每当您尝试使用push向其中任何一个添加项时,都会影响数组,因为javascript中的引用处的值已更改

您可以在使用spread syntax分配之前克隆阵列

spread syntax

0
投票

有趣的小难题。以前从未听说过Collat​​z。这是我的看法。它会返回前10个序列长度,并显示“获胜”序列。

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;
    }
}}
© www.soinside.com 2019 - 2024. All rights reserved.