Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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_Html_Css_Arrays_Loops - Fatal编程技术网

Javascript 为什么数组本身会更改其值?

Javascript 为什么数组本身会更改其值?,javascript,html,css,arrays,loops,Javascript,Html,Css,Arrays,Loops,在这段html/javascript代码中,每当k发生变化时(在第一个循环中),我想将Q重新分配给A。 但是我也注意到了一个变化!! 那么我该如何解决这个问题呢 为什么A会改变它的值,尽管我只改变了Q 如何防止A发生变化?? 谢谢你的回答 var A=[[3,4],[5,7]]; var Q=[]; 对于(var k=0;k试试这个。参考 功能阵列式旋风分离器(arr){ var i,副本; if(数组isArray(arr)){ 复制=arr.slice(0); 对于(i=0;i

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

  • 为什么A会改变它的值,尽管我只改变了Q
  • 如何防止A发生变化?? 谢谢你的回答

var A=[[3,4],[5,7]]; var Q=[];
对于(var k=0;k试试这个。参考


功能阵列式旋风分离器(arr){ var i,副本; if(数组isArray(arr)){ 复制=arr.slice(0); 对于(i=0;i对于(var k=0;kbe因为
Q=A
不创建数组的副本,
Q
A
引用同一个数组对象。
Q=A
-您将
A
的引用指定给
Q
,因此当您更改
Q
时,它会更改
A
,当您将A指定给Q时,您会将引用设置为A,以便b其他变量都分配给同一个数组,但您需要像这样克隆数组
Q=[…A];
@Cristian
Q=[…A];
wouldntwork@LawrenceCherone好的,我的示例是单级数组,对于嵌套数组,您可以使用
Q=JSON.parse(JSON.stringify(A))来自lodash的
cloneDeep
。这有点过分:)特别是对于代码在end@DarrenChand谢谢你,伙计
<!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>