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