#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);
Вы можете использовать функцию фильтра для сбора элементов, которые не соответствуют заданному идентификатору