【问题标题】:why this arrays changes its value itself? [duplicate]为什么这个数组本身会改变它的值? [复制]
【发布时间】:2021-02-04 21:48:41
【问题描述】:

在这个 html/javascript 代码中,我想在每次 k 更改时(在第一个循环中)将 Q 重新分配给 A。 但是我也注意到了A的变化!! 那么我该如何解决这个问题呢?

  • 为什么我只改变 Q 却改变了 A 的值??
  • 如何防止 A 发生变化? 感谢您的回答

<!DOCTYPE html>
<html>
<body>


<p id="demo"></p>

<script>
var A=[[3,4],[5,7]];

var Q=[];

 for (var k=0;k<2;k++){
 
    Q= A;

    for (var i=0;i<2;i++) {
        Q[k][i]=1;
                    
       }
  }
document.getElementById("demo").innerHTML =  A;

</script>

</body>
</html>

【问题讨论】:

  • 因为Q = A创建数组的副本,QA 都引用同一个数组对象。
  • Q= A - 您将A 的引用分配给Q,因此当您更改Q 时,它更改了A
  • 当你将 A 赋值给 Q 时,你设置了对 A 的引用,这样两个变量就被赋值给了同一个数组,但是你需要像这样克隆数组Q = [... A];
  • @Cristian Q = [...A]; 不会工作

标签: javascript html css arrays loops


【解决方案1】:

试试这个。参考here

<!DOCTYPE html>
<html>
<body>
  <p id="demo"></p>
  <script>
     function arrayClone( arr ) {
     
         var i, copy;
     
         if( Array.isArray( arr ) ) {
             copy = arr.slice( 0 );
             for( i = 0; i < copy.length; i++ ) {
                 copy[ i ] = arrayClone( copy[ i ] );
             }
             return copy;
         } else if( typeof arr === 'object' ) {
             throw 'Cannot clone array containing an object!';
         } else {
             return arr;
         }
     
     }
     
     A=[[3,4],[5,7]];
     var Q=arrayClone(A);
     
      for (var k=0;k<2;k++){
         for (var i=0;i<2;i++) {
             Q[k][i]=1;
                         
            }
       }
     
     document.getElementById("demo").innerHTML =  A;
     
  </script>

【讨论】:

  • 这有点矫枉过正 :) 尤其是代码最后的作用
  • @DarrenChand 谢谢人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
相关资源
最近更新 更多