gpt4 book ai didi

javascript - JavaScript 数组中的对象神秘地链接在一起

转载 作者:行者123 更新时间:2023-12-03 09:23:49 24 4
gpt4 key购买 nike

我有以下代码。当我访问 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com