首页 > 解决方案 > 如何过滤javascript中嵌套数组中存在的对象数组

问题描述

我想知道如何删除deleted嵌套对象数组中的子键中的状态,在javascript中,下面的代码返回不能返回未定义错误的过滤器,我有obj,子键应该只包含状态活动;

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


标签: javascriptarraysobject

解决方案


您可以尝试以下方法:

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;
   });
}


推荐阅读