JavaScript 树,节点包含数组

JavaScript Tree with nodes containing arrays

本文关键字:包含 数组 节点 JavaScript      更新时间:2023-09-26

我需要创建一棵树。

每个节点都有两个二维数组,"statusTable"和"moveTable"。

每个子项都必须继承其父项的 statusTable(它的副本)。

每个节点应有 10 个子节点。

树的创建应该在达到"最大深度"时停止。

当我使用下面的代码时,我意识到所有节点都指向相同的状态表。

请帮忙吗?

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

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