我有以下代码。当我访问 w[1][0] 时,我只想更改该位置处的对象。然而,所有的对象都发生了变化。我假设这是因为在某种程度上,它们都指向同一个对象。我该如何解决这个问题?
var createArray = function(dim,init){//takes an array of dimensions and the initial value of each element
if(dim.length > 0){
var x = new Array();
for(var i = 0; i < dim[0]; i++)
x[i] = createArray(dim.slice(1),init)
return x;
}
return init;
}
var w = createArray([2,2],{top: false,left: false});
console.log(w);
w[1][0].left = true;
console.log(w);
最佳答案
在 JavaScript 中,对象是通过引用传递的,而不是通过值传递的。这意味着如果将同一个对象传递给几个变量,它们都指向内存中的同一位置。这就是为什么你的 init
对象到处都在改变。
为了防止这种情况,您需要在将对象分配给变量之前克隆该对象。最简单的内置方法之一是使用 JSON,如下所示:
var copy = JSON.parse(JSON.stringify(original));
所以在你的情况下就是这样:
x[i] = createArray(dim.slice(1), JSON.parse(JSON.stringify(init)));
关于javascript - JavaScript 数组中的对象神秘地链接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31751754/