我的初始对象:
var data=[
{
"parent":104,
"child":130,
"grandChild":755,
"greatGrandChild":576
},
{
"parent":106
},
{
"parent":109
}
]
生成对象的代码
var nodes=[], levels = ["parent","child","grandChild","greatGrandChild"];
data.forEach(function(d){
var depthCursor=nodes;
levels.forEach(function( property, depth ){
var index;
if(depthCursor!==undefined){
depthCursor.forEach(function(child,i){
if ( d[property] == child.text ) index = i;
});
if ( isNaN(index) ) {
depthCursor.push({ text : d[property], nodes : []});
index = depthCursor.length - 1;
}
depthCursor = depthCursor[index].nodes;
if(d.greatGrandChild!=="" && d.greatGrandChild !==undefined && d.greatGrandChild!==null){
if ( depth === levels.length - 1 ) {
depthCursor.push({ name : d.greatGrandChild });
}
}else if(d.grandChild!=="" && d.grandChild !==undefined && d.grandChild!==null){
if ( depth === levels.length - 2 ) {
depthCursor.push({ name : d.grandChild });
}
}else if(d.child!=="" && d.child !==undefined && d.child!==null){
if ( depth === levels.length - 3 ) {
depthCursor.push({ name : d.child });
}
}else if(d.parent!=="" && d.parent !==undefined && d.parent!==null){
if (depth === levels.length - 4 ) {
depthCursor.push({ name : d.parent});
}
}
}
});
});
我有一个对象数组。创建的最后一个节点的父文本值不正确
[
{"text":104,
"nodes":[
{"text":130,
"nodes":[
{"text":755,
"nodes":[
{"text":576,
"nodes":[
{"name":576}
]
}
]
}
]
}
]
},
{"text":106,
"nodes":[
{"name":106}
]
},
{"text":109,
"nodes":[
{"name":109}
]
}
]
所需的输出
[
{"text": 104,
"nodes": [
{"text": 130,
"nodes": [
{"text": 755,
"nodes": [
{"text": 576}
]
}
]
}
]
},
{"text": 106},
{"text": 109}
]
我想删除附加的最后一个节点。我已经尝试了很多方法来删除它,但没有任何效果。请帮助。 提前致谢
答案 0 :(得分:0)
你可以使一个函数删除没有节点键的对象,并递归地调用这个函数。
var arr = [
{"text":104,
"nodes":[
{"text":130,
"nodes":[
{"text":755,
"nodes":[
{"text":576,
"nodes":[
{"name":576}
]
}
]
}
]
}
]
},
{"text":106,
"nodes":[
{"name":106}
]
},
{"text":109,
"nodes":[
{"name":109}
]
}
];
function removeNode(obj){
if(obj.nodes[0].hasOwnProperty('nodes'))
removeNode(obj.nodes[0]);
else
delete obj.nodes;
}
arr.forEach(function(v){
removeNode(v);
});
console.log(arr);

答案 1 :(得分:0)
首先生成对象的更简洁的方法是使用递归 请看下面的代码:
var data=[
{
"parent":104,
"child":130,
"grandChild":755,
"greatGrandChild":576
},
{
"parent":106
},
{
"parent":109
}
];
var levels = ["parent","child","grandChild","greatGrandChild"];
var nodes = data.map(function(obj) {
return generate(obj, levels);
});
function generate(obj, levels) {
var r = {};
if(obj[levels[0]]) {
r.text = obj[levels[0]];
if(obj[levels[1]]) {
r.nodes = [generate(obj, levels.slice(1))];
}
}
return r;
}
console.log(nodes);