[英]Remove key property from JSON object using javascript
我的最初对象:
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}
]
我想删除附加的最后一个节点。 我尝试了很多方法来删除它,但没有任何效果。 请帮助。 提前致谢
您可以使函数删除没有节点键的对象,然后递归调用此函数。
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);
首先,生成对象的一种更简洁的方法是使用递归。
请看以下片段:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.