как отфильтровать массив объектов, присутствующих во вложенном массиве в javascript - PullRequest
2 голосов
/ 26 мая 2020

Я хотел бы знать, как удалить статус deleted в дочернем ключе во вложенном массиве объектов, в javascript, возврат кода ниже не может вернуть фильтр неопределенной ошибки, у меня есть obj, дочерний ключ должен содержать только статус 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"}]}
]


Ответы [ 2 ]

1 голос
/ 26 мая 2020

Можно попробовать так:

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;
   });
}
0 голосов
/ 26 мая 2020

Если у вас несколько свойств, лучше их разрушить.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...