使用树构建树的问题

Issue constructing a tree using a tree

所以我有这个方法,它基本上遍历一棵树并构造另一棵树,基本上是一个映射方法,但用于数组,但我面临的问题是,除了第一级之外,所有节点都被复制,而不是正确地构造树。谁能指出我在这里做错了什么?

 convertToTree(arcm: any, tree: any) {
    let a = {
      text: arcm.name,
    };

    Object.assign(tree, a);
    if (arcm.parcmTreeMapping && arcm.parcmTreeMapping.length) {
      let arr = new Array<any>(arcm.parcmTreeMapping.length).fill(new Object());
      tree['children'] = arr;
      arcm.parcmTreeMapping.forEach((item, index) => {

        this.convertToTree(item, tree.children[index], descList)
      });
    }
    else{
      return;
    }
  }

当您将 fill()new Array() 一起使用时,它将首先构造一个对象,然后使用对同一对象的引用填充数组。您最终得到一个对象的引用数组:

let arr = new Array(5).fill(new Object())
// they're all the same object
console.log(arr[0] === arr[1])
console.log(arr[2] === arr[3])

// modify one modifies them all:
arr[0].name = "Mark"
console.log(arr[1], arr[2])

您可以尝试 map(),这样您每次都会创建一个新对象:

let arr =  Array(5).fill().map(() => new Object)
console.log(arr)
console.log(arr[0] === arr[1])