Javascript 为什么数组本身会更改其值?
在这段html/javascript代码中,每当k发生变化时(在第一个循环中),我想将Q重新分配给A。 但是我也注意到了一个变化!! 那么我该如何解决这个问题呢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
- 为什么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];
@CristianQ=[…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>