我有一个树,我想找到正确的节点并将数据插入到对象中。
const resultTree = {
grand_parent: {
parent: {
child: {},
},
sibling: {
cousin: {},
},
},
};
例如,在child中插入grand_child。
因此结果如下所示:
const resultTree = {
grand_parent: {
parent: {
child: {
grand_child: {}, // inserted grand_child here
},
},
sibling: {
cousin: {},
},
},
};
我可以根据需要插入更多内容,例如,在child中插入兄弟
const resultTree = {
grand_parent: {
parent: {
child: {
grand_child: {},
sibling: {} // inserted sibling here
},
},
sibling: {
cousin: {},
},
},
};
这就是我现在拥有的,但它不起作用
const findAndInsert = (node: string, tree: Tree, parentNode: string) => {
if (!!tree[parentNode]) {
tree[parentNode][node] = {};
} else {
Object.keys(tree[parentNode]).forEach((n) => {
findAndInsert(node, tree[n], parentNode);
});
}
};
2条答案
按热度按时间zzwlnbp81#
主要问题是
Object.keys(tree[parentNode])
,因为您刚刚确认了parentNode
键在tree
中不存在。我还建议在插入后停止进一步的查找,可以通过返回一个布尔值来表示插入已经发生,然后使用
some
而不是forEach
来实现,另外,实际上并不需要对键进行迭代,而是对 * 值 * 进行迭代,所以使用Object.values
:hgb9j2n62#
这个想法是正确的,只是看起来你有一个打字错误,它是
Object.keys(tree)
而不是Object.keys(tree[parentNode])
。