因此,我有一个基本遍历一棵树并构造另一棵树的方法,基本上是一个映射方法,但是是一个数组,但是面临一个问题,即除了第一层之外,所有节点都不能被正确地构造成树。谁能指出我在这里做错了什么?
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;
}
}
答案 0 :(得分:1)
将io
与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()