0

ツリーを作成する必要があります。

各ノードには、「statusTable」と「moveTable」という 2 つの 2 次元配列があります。

すべての子は、親の statusTable (そのコピー) を継承する必要があります。

すべてのノードには 10 個の子が必要です。

ツリーの作成は、「maxDepth」に達すると停止する必要があります。

以下のコードを使用すると、すべてのノードが同じ statusTable を指していることがわかります。

何か助けてください。

function NODE(p, statTable, movTable, depth)
{
    this.par = p;
    this.statusTable = statTable.slice();
    this.moveTable = movTable.slice();
    this.depth = depth;
}


function createChildren(parentNode)
{
    var childNode, m;

    if (parentNode.depth == maxDepth) return;


    for (m = 0; m < 10; m++) {

        moveTable = [];
        mainTable = parentNode.statusTable.slice();

        childNode = new NODE(parentNode, mainTable, moveTable, parentNode.depth + 1);

        createChildren(childNode);
    }
}
4

1 に答える 1

0

Slice は配列のコピーを作成しますが、それを外側の配列でのみ使用しました。内側の配列は同じです。

あなたが持っている

var inner = [1];

var outer = [inner];
var copy = outer.slice();

copy === outer // false
copy[0] === outer[0] // true
copy[0][0] = 3; // problem
console.log(outer[0][0]) // 3, expecting 1

必要なのは、スライスではなくディープ コピーです。

function deepCopy(arr) {
  var copy = arr.slice();
  for (var i=0; i<copy.length; i++) {
    if (copy[i] instanceof Array) {
      copy[i] = deepCopy(copy[i]);
    }
  }
  return copy;
}
于 2013-11-08T16:03:12.147 に答える