我正在尝试使用从线程中的stackoverflow找到的代码创建包含对象的数组的深层副本,该代码显示了如何创建数组的深层副本。
alert("here"); //this is shown
var newArr = jQuery.extend(true,[],playerLst);
alert("here2") //this is not shown
var returnArr = [];
控制台错误:
Uncaught RangeError: Maximum call stack size exceeded
对对象进行深拷贝是我项目的重要组成部分,在这里确实需要一些帮助。
编辑:
这就是我的对象的赋值方式,对于爱沙尼亚变量,很抱歉,我使用它们使代码更清晰。
for(var i = 0; i<myValues.length;i++){
var Player = new Object();
var name = myValues[i];
Player["name"] = name;
Player["voor_1"] = 0;
Player["voor_2"] = 0;
Player["voor_3"] = 0;
Player["voor_4"] = 0;
Player["voor_5"] = 0;
Player["voor_6"] = 0;
Player["voor_7"] = 0;
Player["punkte"] = 0;
Player["koef"] = 0;
Player["suhe"] = "0:0";
Player["koht"] = i+1;
Player["playedNames"] = [];
playerLst.push(Player);
}
E3:
最佳答案
您正在将一个对象引用到同一棵树中的另一个对象,因此最终将导致一个循环。
Players: {
name1: {
hasPlayedWith: name2 // *
},
name2: {
hasPlayedWith: name1 // *
}
}
/* deep copy now copies name2/name1,
which references back to name1/name2.
You're now ending up in a never ending loop,
named circular reference
(or reference cycle, circular structure, ...) */
为了避免这种情况,您可以将播放器的名称另存为字符串,然后使用Players ['name']进行调用
Players: {
name1: {
hasPlayedWith: 'name2'
},
name2: {
hasPlayedWith: 'name1'
}
}