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

时间:2017-07-10 11:12:34

标签: javascript json javascript-objects

我的初始对象:

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}
]

我想删除附加的最后一个节点。我已经尝试了很多方法来删除它,但没有任何效果。请帮助。 提前致谢

2 个答案:

答案 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);