繁体   English   中英

使用JavaScript从JSON对象中删除键属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM