Javascript 数组的深度复制导致范围错误:超过最大调用堆栈大小

Javascript 数组的深度复制导致范围错误:超过最大调用堆栈大小,javascript,arrays,Javascript,Arrays,我正在尝试创建数组的深度副本,其中包含对象,我在一个线程中从stackoverflow中找到了一个代码,该代码演示了如何创建数组的深度副本 alert("here"); //this is shown var newArr = jQuery.extend(true,[],playerLst); alert("here2") //this is not shown var returnArr = []; 控制台中的错误: Uncaught RangeError: Maximum call sta

我正在尝试创建数组的深度副本,其中包含对象,我在一个线程中从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
我的对象的Deepcopy是我项目的重要组成部分,在这里确实需要一些帮助

编辑:

这就是我的对象的值,对不起,爱沙尼亚变量,我使用它们使代码更清晰

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);
   }

for(var i=0;i您正在将一个对象引用到同一树中的另一个对象,因此您将在一个循环中结束

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'
    }
}

这可能意味着你的源对象有引用循环。如果没有看到你的源数据结构,就不可能更具体。你能更具体地说明我能提供什么吗?位于PlayerList内的对象属性?英语不是我的母语,我理解有点困难,对不起:)如果对象具有引用循环,则表示对象的一部分引用另一部分。当深度复制代码“探索”对象时,它会遇到循环并被卡住,一遍又一遍地复制和重新复制对象的部分。你没有发布“playersLst”的结构,所以我不知道问题出在哪里。这个结构不应该引起问题,除非“myValues”数组包含循环引用的对象。如果添加
console.dir(playerLst)
在调用
jQuery.extend()
之前,您可能可以通过浏览器开发人员控制台查看出了什么问题。如果有循环,控制台应该和jQuery一样混乱。添加了控制台日志的图片,它并不完美,但应该能够理解发生了什么?有什么想法吗?