如何在javascript中从树数据结构生成数组数组?

如何在javascript中从树数据结构生成数组数组?,javascript,arrays,data-structures,tree,Javascript,Arrays,Data Structures,Tree,如何将上述数据结构转换为 [['Tywin'],['Jamie','Cersi', 'Tyrion'], ['Joeffry', 'Myrcella', 'Tomen', 'Lin']] 这是我的密码: let Tree=函数(名称){ this.name=名称; 这是:children=[]; } Tree.prototype.addChild=函数(父级,名称){ const node=lannister.contains(父节点); node.children.push(新树(名称))

如何将上述数据结构转换为

[['Tywin'],['Jamie','Cersi', 'Tyrion'], ['Joeffry', 'Myrcella', 'Tomen', 'Lin']]
这是我的密码:

let Tree=函数(名称){
this.name=名称;
这是:children=[];
}
Tree.prototype.addChild=函数(父级,名称){
const node=lannister.contains(父节点);
node.children.push(新树(名称));
}
var lannister=新树('Tywin');
兰尼斯特.艾德柴尔德('Tywin','Jamie');
兰尼斯特.艾德柴尔德('Tywin','Cersi');
兰尼斯特.阿德柴尔德('Tywin','Tyrion');
兰尼斯特·艾德柴尔德('Cersi','Joffery');
兰尼斯特·艾德柴尔德('Cersi','Myrcella');
lannister.addChild('Cersi','Tomen');
兰尼斯特.阿德奇尔德('Tyrion','Lin');
bfs();
功能bfs(检查){
//log('traverseBFS调用:',this);
bfsArray=[];
var queue=[this];
var节点;
var tempAr=[];
bfsArray.push([this.name]);
while(queue.length>0){
node=queue.shift();
回调(node.name、node.children.length);
log('当前节点为:',节点,节点.children.length);
对于(var i=0;i};肮脏的解决方案:将对象用作树结构,并将字符名保留在对象键中

let family_tree = {
   Jamie: {},
   Cersei: {Joeffry: {}, Myrcella: {}, Tomen: {}},
   Tyrion: {Lin: {}}
}


如果需要在对象中循环,请使用
object.keys(family_tree)
方法。

您可以使用数组和递归函数来存储级别并将名称推送到相关级别

功能节点(名称){
this.name=名称;
这是:children=[];
}
函数树(名称){
this.tree=新节点(名称);
}
Tree.prototype.addChild=函数(父,子){
函数findParent(节点){
var发现;
如果(node.name==父节点)返回节点;
node.children.some(n=>found=findParent(n));
发现退货;
}
var node=findParent(this.tree)| | this.tree;
node.children.push(新节点(子节点));
};
Tree.prototype.BST=函数(){
const getNodes=(级别=0)=>node=>{
级别[级别]=级别[级别]| |[];
levels[level].push(node.name);
node.children.forEach(getNodes(级别+1));
};
风险值水平=[];
getNodes()(this.tree);
回报水平;
}
var lannister=新树('Tywin');
兰尼斯特.艾德柴尔德('Tywin','Jamie');
兰尼斯特.艾德柴尔德('Tywin','Cersi');
兰尼斯特.阿德柴尔德('Tywin','Tyrion');
兰尼斯特·艾德柴尔德('Cersi','Joffery');
兰尼斯特·艾德柴尔德('Cersi','Myrcella');
lannister.addChild('Cersi','Tomen');
兰尼斯特.阿德奇尔德('Tyrion','Lin');
log(lannister.BST());
控制台日志(兰尼斯特)

.as console wrapper{max height:100%!important;top:0;}
这绝不是解决方案。是的,我需要找到任何给定节点的父节点、子节点和同级关系。你知道如何在javascript中实现吗?第19行包含第一个错误:“TypeError:lannister.contains不是一个函数”像一个符咒一样工作……你是一个救生员!非常感谢你