Как удалить вложенный объект JSON с помощью идентификатора

#javascript #loops #object #recursion #data-structures

Вопрос:

В своем приложении я создаю объект JavaScript на основе JSON, похожего на этот:

 {
  name: "root",
  id: 112,
  children: [
    {
      name: "child one",
      id: 231,
      children: [
       {name: "grand child 1", id: 334, children: []},
       {name: "grand child 2", id: 784, children: []}
      ]
   },
   {
     name: "child two",
     id: 343,
     children: []
   }
  ]
}
 

Как я могу удалить любого ребенка по его удостоверению личности? Пожалуйста, обратите внимание, что я не знаю статического пути к узлу, например, id == 334, поэтому мне интересно, как я мог бы удалить этот узел, просто зная его идентификатор.

Комментарии:

1.Как бы вы нашли нужную вам запись? Сделайте это, но затем удалите его ( скажем, с помощью Array.splice() developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…).

2. пожалуйста, уточните вопрос

Ответ №1:

 function del(obj,id){
  obj.children = obj.children.filter(el => {
    if(el.children) del(el,id);//delete subnodes
    return el.id !== id; //delete this
 });
}
 

Рекурсивный подход для обхода объектов, используемый в качестве:

 del(
 { children:[ { id:1 }, { id:2, children:[{id:1}] }] },
1
);
 

Ответ №2:

проверьте это :

 var abc = your json object;
 

//теперь отфильтруйте элемент на основе идентификатора

 abc = jQuery.grep(
                abc.children, 
                function (item,index) { 
                  return item.id !=  "343"; 
                });
 

надеюсь, это поможет.

Ответ №3:

 var delIt = function (obj,id) {

   return obj.children = obj.children.filter(function (child) {
        if(child.children) delIt(child,id);
        return child.id!=id;
    });


}

var x= delIt(Tobj,335);
 

Вы можете использовать функцию фильтра для сбора элементов, которые не соответствуют заданному идентификатору