gpt4 book ai didi

Javascript 数组在更改后保持不变

转载 作者:行者123 更新时间:2023-11-30 07:42:40 25 4
gpt4 key购买 nike

我正在制作一个应用程序,其中的算法在数组上运行。因为数组的内容会在算法执行期间发生变化,所以我预先将数组内容存储到另一个数组 - 在源数组上执行“if”语句但更新临时数组,然后将它们等同。

问题是运行算法后,两个数组仍然相同。似乎更新临时数组会自动更新源数组。

我创建了 this jsfiddle演示:

var a = new Array( 0 , 1 , 2 );
var b = a;

b[1]=3;

document.write( (a[1]==b[1]) );

//Should show 'false' as this will not be correct

上面的代码返回“True”。这是正常行为吗?我该如何克服这个问题?

最佳答案

这是正常行为,当复制数组时你实际上是在创建一个引用,所以当你执行 var b = a 这意味着你只是复制引用而不是复制值

如果你想浅拷贝一个数组(只有一个深度的数组)那么你可以使用像这样的简单方法:

var b = a.slice(0);

但是如果你想深度复制一个数组(具有 2 个或更多深度级别的数组),那么你可以使用下面的方法:

var objClone = function(srcObj) {
var destObj = (this instanceof Array) ? [] : {};
for (var i in srcObj)
{
if (srcObj[i] && typeof srcObj[i] == "object") {
destObj[i] = objClone(srcObj[i]);
} else {
destObj[i] = srcObj[i];
}
}

return destObj;
};

要使用这两种方法,请查看 this jsFiddle

关于Javascript 数组在更改后保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13529121/

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