gpt4 book ai didi

JavaScript 变量无缘无故地链接在一起

转载 作者:行者123 更新时间:2023-11-28 19:35:04 25 4
gpt4 key购买 nike

我正在开发一个项目,其中遇到一个数组变量突然包含与另一个数组变量相同的问题。借助懒人的警报提示,我将问题范围缩小到了这段代码,突然一切都出错了:

// The array "data" is the result of a JSON request - this works fine..
// "data" is a two-dimensional array.
allShowsVars = data.slice();
allShowsVars.sort(function(a, b) {
var aL = a[1].toLowerCase(), bL = b[1].toLowerCase();
if(aL < bL) return -1;
else if(aL > bL) return 1;
else return 0;
});
// At this moment, the allShowsVars variable holds the right contents from the data array..
showsVars = allShowsVars.slice(); // Here, we make a copy of allShowsVars..
for(var iS = 0, sPos; typeof showsVars[iS] != 'undefined'; iS++) {
sPos = showsVars[iS][1].indexOf(" - Season ");
if(sPos != -1) {
showsVars[iS][1] = showsVars[iS][1].slice(0,sPos);
if(iS > 0) {
if(showsVars[(iS-1)][1] == showsVars[iS][1]) showsVars.splice(iS,1);
iS--;
}
}
}
// I changed showsVars in the above for loop, cutting out " - Season ......" in a lot of entries.

现在,allShowsVars 也有了showsVars 中新的、更改的内容。为什么???变量没有链接在一起!我想我在某个地方错过了一些明显的东西。我只需要一个足够聪明的人来看到它:)

最佳答案

这来自documentation of Array.prototype.slice()来自 MDN。

For object references (and not the actual object), slice copies object references into the new array. Both the original and new array refer to the same object. If a referenced object changes, the changes are visible to both the new and original arrays.

这就是您的案例中发生的情况。

您可以使用此技巧来深度复制数组:

var deepCopy = JSON.parse(JSON.stringify(sourceArray));

参见herehere用于 JavaScript 数组/对象的深度复制。

关于JavaScript 变量无缘无故地链接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26033438/

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