Reputation: 773
I would like to know how to remove the status deleted
in children key in a nested array of objects,
in javascript, below code returns cannot return filter of undefined error,
I have obj
, children key should contain only status Active;
var obj = [
{id:1, label: "sample", children: [{id: 0, status: "Active", name: "xyz"}, {id: 1, status: "Deleted", name: "abc"}]}
{id:2, label: "example"},
{id:3, label: "details", children: [{id:1, status: "Active", name: "finance"}]}
]
var result = removeDeleted(obj);
function removeDeleted(obj){
if (obj.length > 0) {
var list= obj.map(e => {
e.children = e.children.map(child => {
child.children = child.children.filter(c =>
c['status'] !== "Deleted"
);
return child
});
return e
});
return list;
}
}
Expected Output:
[
{id:1, label: "sample", children: [{id: 0, status: "Active", name: "xyz"}]}
{id:2, label: "example"},
{id:3, label: "details", children: [{id:1, status: "Active", name: "finance"}]}
]
Upvotes: 2
Views: 469
Reputation: 5308
If you have multiple properties, its better to destructure it.
var obj = [ {id:1, label: "sample", children: [{id: 0, status: "Active", name: "xyz"}, {id: 1, status: "Deleted", name: "abc"}]}, {id:2, label: "example"}, {id:3, label: "details", children: [{id:1, status: "Active", name: "finance"}]}];
var result = obj.map(({children, ...rest})=>{
if(children) children = children.filter(({status})=>status=='Active');
if(children) return {...rest, children};
return rest
});
console.log(result);
Upvotes: 0
Reputation: 68933
You can try the following way:
var obj = [
{id:1, label: "sample", children: [{id: 0, status: "Active", name: "xyz"}, {id: 1, status: "Deleted", name: "abc"}]},
{id:2, label: "example"},
{id:3, label: "details", children: [{id:1, status: "Active", name: "finance"}]}
]
var result = removeDeleted(obj);
console.log(result);
function removeDeleted(obj){
return obj.map(i => {
if(i.children){
var c = i.children.filter(j => j.status != 'Deleted');
return {id: i.id, label:i.label, children:c};
}
else return i;
});
}
Upvotes: 1