Javascript JSON到树JS
有人能帮我更改这个json吗: 规则如下: JSON(A)的节点没有按特定顺序排序 JSON(A)的节点是可变的 没有附加子节点时,“从属”节点不得存在(请参见markcorderoi或richard) 状态表示雇佣状态,1=工作,2=结束。连接到终端(2)节点的所有工作节点应使用相邻(上行链路)工作(1)节点(即连接到nssi的marcoderoi,在最终树中删除rudy) JSON(B)不应包含结束节点 JSON A:Javascript JSON到树JS,javascript,json,tree,Javascript,Json,Tree,有人能帮我更改这个json吗: 规则如下: JSON(A)的节点没有按特定顺序排序 JSON(A)的节点是可变的 没有附加子节点时,“从属”节点不得存在(请参见markcorderoi或richard) 状态表示雇佣状态,1=工作,2=结束。连接到终端(2)节点的所有工作节点应使用相邻(上行链路)工作(1)节点(即连接到nssi的marcoderoi,在最终树中删除rudy) JSON(B)不应包含结束节点 JSON A: [ { "manager_name": "nssi",
[
{
"manager_name": "nssi",
"login_name": "nishanthi",
"status": 2
},
{
"manager_name": "mbarcelona",
"login_name": "nssi",
"status": 1
},
{
"manager_name": "nishanthi",
"login_name": "markcorderoi",
"status": 1
},
{
"manager_name": "mbarcelona",
"login_name": "richard",
"status": 1
},
{
"manager_name": "letecia",
"login_name": "kamran",
"status": 1
},
{
"manager_name": "letecia",
"login_name": "rudy",
"status": 2
},
{
"manager_name": "rudy",
"login_name": "sol",
"status": 2
},
{
"manager_name": "gloria",
"login_name": "maria",
"status": 1
},
{
"manager_name": "markcorderoi",
"login_name": "gloria",
"status": 1
}
]
这个
JSON B:
[
{
"subordinate":[
{
"subordinate":[
{
"subordinate":[
{
"subordinate":[
{
"name":"maria"
}
],
"name":"gloria"
}
],
"name":"markcorderoi"
}
],
"name":"nssi"
},
{
"name":"richard"
}
],
"name":"mbarcelona"
},
{
"subordinate":[
{
"name":"kamran"
},
{
"name":"sol"
}
],
"name":"letecia"
}
]
我真的很难只用Javascript来做一些算法。这有点棘手,因为您的数据不包含没有父节点的项,所以会收集所有子节点和所有父节点。只有父级才是结果集没有子级的使用 在
结束
中,收集所有状态===2
节点,如果这些节点作为父节点工作,则随后将其删除
函数getTree(数据){
var o={},
儿童={},
父母={},
结束=[];
data.forEach(函数(a){
var temp={name:a.login_name};
children[a.login_name]=true;
父母[a.manager\u name]=true;
如果(a.status==2){
结束。推(a);
}
if(o[a.login\u name]&&o[a.login\u name].下属){
temp.substance=o[a.login\u name]。substance;
}
o[a.login_name]=临时;
o[a.manager_name]=o[a.manager_name]|{name:a.manager_name};
o[a.manager_name].下属=o[a.manager_name].下属| |[];
o[a.manager\u name].下属.push(临时);
});
结束。forEach(函数(a){
var指数=-1;
if(o[a.login\u name].下属){
o[a.manager\u name].下属.some(函数(b,i){
如果(b==o[a.login\u name]){
指数=i;
返回true;
}
});
如果(索引!=-1){
o[a.manager\u name].substance.splice(索引,1);
o[a.manager\u name].subscribe=o[a.manager\u name].subscribe.concat(o[a.login\u name].subscribe);
}
}
});
Object.keys(子项).forEach(函数(k){
删除父母[k];
});
返回对象.keys(父项).map(函数(k){
返回o[k];
});
}
var数据=[{管理者姓名:“nssi”,登录名:“nishanthi”,状态:2},{管理者姓名:“mbarcelona”,登录名:“nssi”,状态:1},{管理者姓名:“nishanthi”,登录名:“markcorderoi”,状态:1},{管理者姓名:“mbarcelona”,登录名:“richard”,状态:1},{管理者姓名:“letecia”,登录名:“kamran”,状态:1},{经理姓名:“letecia”,登录名:“rudy”,状态:2},{经理姓名:“rudy”,登录名:“sol”,状态:2},{经理姓名:“gloria”,登录名:“maria”,状态:1},{经理姓名:“markcorderoi”,登录名:“gloria”,状态:1}];
console.log(getTree(data));
。作为控制台包装器{max height:100%!important;top:0;}
可能的重复!可能的重复是的,我尝试了那个链接,但仍然无法更正。请帮助。我尝试了这么多方法,然后我被这个成功所绊倒:函数(数据){var node={};var map={};var root=[];for(var i=0;i