用Javascript表示树层次结构

用Javascript表示树层次结构,javascript,node.js,Javascript,Node.js,我有如下条款: var terms = [ { id: 1, name: "Name 1", parent: null }, { id: 2, name: "Name 2", parent: 6 }, { id: 3, name: "Name 3", parent: null }, { id: 4, name: "Name 4", parent: 2}, { id: 5, name: "Name 5", parent

我有如下
条款

var terms = [
        { id: 1, name: "Name 1", parent: null },
        { id: 2, name: "Name 2", parent: 6 },
        { id: 3, name: "Name 3", parent: null },
        { id: 4, name: "Name 4", parent: 2},
        { id: 5, name: "Name 5", parent: 3 },
        { id: 6, name: "Name 6", parent: null },
        { id: 7, name: "Name 7", parent: 3 },
        { id: 8, name: "Name 8", parent: 9 },
        { id: 9, name: "Name 9", parent: 4 }
];
现在,我想处理
term
以获得输出:

var orderedTerms = [
        { id: 1, name: "Name 1", parent: null , deep: 0},
        { id: 3, name: "Name 3", parent: null , deep: 0},
        { id: 5, name: "Name 5", parent: 3 , deep: 1},
        { id: 7, name: "Name 7", parent: 3 , deep: 1},
        { id: 6, name: "Name 6", parent: null , deep: 0},
        { id: 2, name: "Name 2", parent: 6, deep: 1},
        { id: 4, name: "Name 4", parent: 2, deep: 2},
        { id: 9, name: "Name 9", parent: 4, deep: 3},
        { id: 8, name: "Name 8", parent: 9, deep: 4 }
];

我想有人可以帮我用Javascript(NodeJS)来完成。提前感谢。

下面的代码应该可以帮助您:

var术语=[
{id:1,name:“name 1”,父项:null},
{id:2,name:“name 2”,父项:6},
{id:3,name:“name 3”,父项:null},
{id:4,name:“name 4”,父项:2},
{id:5,name:“name 5”,父项:3},
{id:6,name:“name 6”,父项:null},
{id:7,name:“name 7”,父项:3},
{id:8,name:“name 8”,parent:9},
{id:9,name:“name 9”,父项:4}
];
var deep0=terms.filter(函数(术语){
如果(term.parent==null){
term.deep=0;
返回true;
}
返回false;
});
函数makeTree(源、arr、最终){
如果(!最终)
最终=arr.切片();
如果(arr.length>0){
var deep=arr[0]。deep+1;
source.forEach(功能(项目一){
if(arr.map)(功能(术语){
返回项.id;
}).indexOf(item.parent)>=0){
item.deep=深度;
var idx=final.map(函数(术语){
返回(term.id==item.parent | | term.parent===item.parent);
}).lastIndexOf(真);
最终拼接(idx+1,0,项目);
}
});
makeTree(源,final.filter)(函数(术语){
return term.deep==deep;
}),最终版本);
}
返回最终结果;
}
var final=makeTree(术语,0);

document.body.innerHTML=''只需一点递归即可

函数getTree(父级,级别){
级别=级别| | 0;
术语.forEach(功能(a){
如果(a.parent==父项){
push({id:a.id,name:a.name,parent:a.parent,deep:level});
getTree(a.id,级别+1);
}
});
}
var术语=[
{id:1,name:“name 1”,父项:null},
{id:2,name:“name 2”,父项:6},
{id:3,name:“name 3”,父项:null},
{id:4,name:“name 4”,父项:2},
{id:5,name:“name 5”,父项:3},
{id:6,name:“name 6”,父项:null},
{id:7,name:“name 7”,父项:3},
{id:8,name:“name 8”,parent:9},
{id:9,name:“name 9”,父项:4}
],
orderedTerms=[];
getTree(null);

document.write(''+JSON.stringify(orderedTerms,0,4)+'')你尝试过什么吗?你能分享你迄今为止尝试过的吗?与提供整个解决方案的人相比,你更容易得到错误的建议。排序标准(id、父级或深度)是什么?我将尝试做一些事情,稍后更新我的问题。但是,如果有人这样做了,他们可以在我之前帮助我。我建议实际粘贴一些代码,显示您正在尝试执行的操作。谢谢您理解我的问题。你的代码对我有用。谢谢你的回答。我不知道为什么很多人不能理解我的问题:)