Copying a javascript array inside a class protoype function
本问题已经有最佳答案,请猛点这里访问。
我在javascript上有这个类:
1 2 3 4 5 6 7 8 9 10 | function Node(board,x,y,t){ this.board = board; this.x = x; this.y = y; this.playerTile = t; this.oponentTile = getOponentTile(this.playerTile); this.parent = null; this.getChildren = getChildren; }; |
我用的是这个函数,它使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | var getChildren = function() { if(this.x==-1 && this.y ==-1){ var moves = getAllValidMoves(this.board,this.playerTile); } else{ var tempBoard = this.board.slice(); makeMove(tempBoard,this.playerTile,this.x,this.y); var moves = getAllValidMoves(tempBoard,this.playerTile); } var children = []; for(var i = 0;i<moves.length;i++){ var currentMove = moves[i]; var currentBoard = this.board.slice(); if(this.x==-1 && this.y ==-1){ children.push(new Node(currentBoard,currentMove[0],currentMove[1],this.playerTile)); } else{ makeMove(currentBoard,this.playerTile,this.x,this.y) children.push(new Node(currentBoard,currentMove[0],currentMove[1],this.oponentTile)); } } return children; }; |
问题是在调用
是否有任何方法可以在不引用数组的情况下复制数组?
也许帮助
1 2 3 4 | function copy(data){ var result = JSON.stringify(data); return JSON.parse(result); } |
这意味着,如果您有一个对象数组,并且使用
但是,如果修改数组中的对象,则两个数组中的对象相同,因此对数组中的任何对象进行修改(例如更改对象的属性)将在两个数组中看到。
如果您想要数组及其内容的完整副本,那么您必须进行深度复制,这会更复杂一些,并且可能稍微依赖于数组中的具体内容。
有许多不同的方法来制作深度复制。您可以在这些参考资料中了解到其中的许多内容:
如何正确克隆javascript对象?
在javascript中将对象数组复制到另一个数组中(深度复制)
在javascript中按值复制数组
如果保证数组中没有任何循环引用(其中一个对象指向另一个对象,而另一个对象又指向它),那么最简单的复制方法是:
1 | var tempBoard = JSON.parse(JSON.stringify(this.board)); |