Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS-过滤对象的嵌套数组_Javascript_Arrays - Fatal编程技术网

Javascript JS-过滤对象的嵌套数组

Javascript JS-过滤对象的嵌套数组,javascript,arrays,Javascript,Arrays,示例JSON数据: const data = [{ "_id": "5cc5df25a193c21608666b00", "departmentName": "Software Dev", "managerId": "5cc5df25a193c21608666b01", "managerEmail": "swdmanager@company.com", "teams": [{ "teamName": "SWD Team 1",

示例JSON数据:

const data = [{
    "_id": "5cc5df25a193c21608666b00",
    "departmentName": "Software Dev",
    "managerId": "5cc5df25a193c21608666b01",
    "managerEmail": "swdmanager@company.com",
    "teams": [{
        "teamName": "SWD Team 1",
        "teamLeadId": "5cc5df25a193c21608666b02",
        "teamLeadEmail": "swdteam1lead@company.com",
        "teamMembers": [{
          "memberId": "5cc5df25a193c21608666b03",
          "memberEmail": "JonDoe1@company.com"
        }]
      },
      {
        "teamName": "SWD Team 2",
        "teamLeadId": "5cc5df25a193c21608666b04",
        "teamLeadEmail": "swdteam2lead@company.com",
        "teamMembers": [{
            "memberId": "5cc5df25a193c21608666b05",
            "memberEmail": "JonDoe2@company.com"
          },
          {
            "memberId": "5cc5df25a193c21608666b06",
            "memberEmail": "JonDoe3@company.com"
          }
        ]
      }
    ]
  },
  {
    "_id": "5cc5df25a193c21608666b07",
    "departmentName": "Software QA",
    "managerId": "5cc5df25a193c21608666b08",
    "managerEmail": "qamanager@company.com",
    "teams": [{
        "teamName": "QA Team 1",
        "teamLeadId": "5cc5df25a193c21608666b09",
        "teamLeadEmail": "qateam1lead@company.com",
        "teamMembers": [{
          "memberId": "5cc5df25a193c21608666b10",
          "memberEmail": "JonDoe4@company.com"
        }]
      },
      {
        "teamName": "QA Team 2",
        "teamLeadId": "5cc5df25a193c21608666b11",
        "teamLeadEmail": "qateam2lead@company.com",
        "teamMembers": []
      },
      {
        "teamName": "QA Team 3",
        "teamLeadId": "5cc5df25a193c21608666b12",
        "teamLeadEmail": "qateam3lead@company.com",
        "teamMembers": [{
            "memberId": "5cc5df25a193c21608666b13",
            "memberEmail": "JonDoe4@company.com"
          },
          {
            "memberId": "5cc5df25a193c21608666b14",
            "memberEmail": "JonDoe5@company.com"
          },
          {
            "memberId": "5cc5df25a193c21608666b15",
            "memberEmail": "JonDoe6@company.com"
          }
        ]
      }
    ]
  },
  {
    "_id": "5cc5df25a193c21608666b16",
    "departmentName": "Software Creative",
    "managerId": "5cc5df25a193c21608666b17",
    "managerEmail": "swcmanager@company.com",
    "teams": []
  },
  {
    "_id": "5cc5df25a193c21608666b18",
    "departmentName": "Software BA",
    "managerId": "5cc5df25a193c21608666b19",
    "managerEmail": "swbamanager@company.com",
    "teams": [{
      "teamName": "BA Team 1",
      "teamLeadId": "5cc5df25a193c21608666b20",
      "teamLeadEmail": "bateam3lead@company.com",
      "teamMembers": []
    }]
  }
];
[
  {
    "_id": "5cc5df25a193c21608666b00",
    "departmentName": "Software Dev",
    "managerId": "5cc5df25a193c21608666b01",
    "managerEmail": "swdmanager@company.com",
    "teams": [
      {
        "teamName": "SWD Team 1",
        "teamLeadId": "5cc5df25a193c21608666b02",
        "teamLeadEmail": "swdteam1lead@company.com",
        "teamMembers": [
          {
            "memberId": "5cc5df25a193c21608666b03",
            "memberEmail": "JonDoe1@company.com"
          }
        ]
      },
      {
        "teamName": "SWD Team 2",
        "teamLeadId": "5cc5df25a193c21608666b04",
        "teamLeadEmail": "swdteam2lead@company.com",
        "teamMembers": [
          {
            "memberId": "5cc5df25a193c21608666b05",
            "memberEmail": "JonDoe2@company.com"
          },
          {
            "memberId": "5cc5df25a193c21608666b06",
            "memberEmail": "JonDoe3@company.com"
          }
        ]
      }
    ]
  },
  {
    "_id": "5cc5df25a193c21608666b07",
    "departmentName": "Software QA",
    "managerId": "5cc5df25a193c21608666b08",
    "managerEmail": "qamanager@company.com",
    "teams": [
      {
        "teamName": "QA Team 1",
        "teamLeadId": "5cc5df25a193c21608666b09",
        "teamLeadEmail": "qateam1lead@company.com",
        "teamMembers": [
          {
            "memberId": "5cc5df25a193c21608666b10",
            "memberEmail": "JonDoe4@company.com"
          }
        ]
      },
      {
        "teamName": "QA Team 3",
        "teamLeadId": "5cc5df25a193c21608666b12",
        "teamLeadEmail": "qateam3lead@company.com",
        "teamMembers": [
          {
            "memberId": "5cc5df25a193c21608666b13",
            "memberEmail": "JonDoe4@company.com"
          },
          {
            "memberId": "5cc5df25a193c21608666b14",
            "memberEmail": "JonDoe5@company.com"
          },
          {
            "memberId": "5cc5df25a193c21608666b15",
            "memberEmail": "JonDoe6@company.com"
          }
        ]
      }
    ]
  }
]

Desc:有三个级别。顶部=部门,中间=团队,底部=团队成员。一个部门可以有0个或多个团队。一个团队可以有0个或多个团队成员

目标:我尝试只返回teamMembers数组中至少填充了一个值的数据

因此,应该在输出中消除的是1)软件QA/QA团队2-只有QA团队2,因为其他QA团队有团队成员2)软件创意-整个对象,因为它甚至没有团队,更不用说团队成员了,3)软件BA-只有一个团队,但没有团队成员。这三个对象在teamMembers数组中没有填充单个值

我觉得我需要使用嵌套对象(#JSnewbie),但不确定如何使用它。另外,我现在正在学习JS,所以一些关于实现这一点的最新方法的建议将非常棒

所需输出:

const data = [{
    "_id": "5cc5df25a193c21608666b00",
    "departmentName": "Software Dev",
    "managerId": "5cc5df25a193c21608666b01",
    "managerEmail": "swdmanager@company.com",
    "teams": [{
        "teamName": "SWD Team 1",
        "teamLeadId": "5cc5df25a193c21608666b02",
        "teamLeadEmail": "swdteam1lead@company.com",
        "teamMembers": [{
          "memberId": "5cc5df25a193c21608666b03",
          "memberEmail": "JonDoe1@company.com"
        }]
      },
      {
        "teamName": "SWD Team 2",
        "teamLeadId": "5cc5df25a193c21608666b04",
        "teamLeadEmail": "swdteam2lead@company.com",
        "teamMembers": [{
            "memberId": "5cc5df25a193c21608666b05",
            "memberEmail": "JonDoe2@company.com"
          },
          {
            "memberId": "5cc5df25a193c21608666b06",
            "memberEmail": "JonDoe3@company.com"
          }
        ]
      }
    ]
  },
  {
    "_id": "5cc5df25a193c21608666b07",
    "departmentName": "Software QA",
    "managerId": "5cc5df25a193c21608666b08",
    "managerEmail": "qamanager@company.com",
    "teams": [{
        "teamName": "QA Team 1",
        "teamLeadId": "5cc5df25a193c21608666b09",
        "teamLeadEmail": "qateam1lead@company.com",
        "teamMembers": [{
          "memberId": "5cc5df25a193c21608666b10",
          "memberEmail": "JonDoe4@company.com"
        }]
      },
      {
        "teamName": "QA Team 2",
        "teamLeadId": "5cc5df25a193c21608666b11",
        "teamLeadEmail": "qateam2lead@company.com",
        "teamMembers": []
      },
      {
        "teamName": "QA Team 3",
        "teamLeadId": "5cc5df25a193c21608666b12",
        "teamLeadEmail": "qateam3lead@company.com",
        "teamMembers": [{
            "memberId": "5cc5df25a193c21608666b13",
            "memberEmail": "JonDoe4@company.com"
          },
          {
            "memberId": "5cc5df25a193c21608666b14",
            "memberEmail": "JonDoe5@company.com"
          },
          {
            "memberId": "5cc5df25a193c21608666b15",
            "memberEmail": "JonDoe6@company.com"
          }
        ]
      }
    ]
  },
  {
    "_id": "5cc5df25a193c21608666b16",
    "departmentName": "Software Creative",
    "managerId": "5cc5df25a193c21608666b17",
    "managerEmail": "swcmanager@company.com",
    "teams": []
  },
  {
    "_id": "5cc5df25a193c21608666b18",
    "departmentName": "Software BA",
    "managerId": "5cc5df25a193c21608666b19",
    "managerEmail": "swbamanager@company.com",
    "teams": [{
      "teamName": "BA Team 1",
      "teamLeadId": "5cc5df25a193c21608666b20",
      "teamLeadEmail": "bateam3lead@company.com",
      "teamMembers": []
    }]
  }
];
[
  {
    "_id": "5cc5df25a193c21608666b00",
    "departmentName": "Software Dev",
    "managerId": "5cc5df25a193c21608666b01",
    "managerEmail": "swdmanager@company.com",
    "teams": [
      {
        "teamName": "SWD Team 1",
        "teamLeadId": "5cc5df25a193c21608666b02",
        "teamLeadEmail": "swdteam1lead@company.com",
        "teamMembers": [
          {
            "memberId": "5cc5df25a193c21608666b03",
            "memberEmail": "JonDoe1@company.com"
          }
        ]
      },
      {
        "teamName": "SWD Team 2",
        "teamLeadId": "5cc5df25a193c21608666b04",
        "teamLeadEmail": "swdteam2lead@company.com",
        "teamMembers": [
          {
            "memberId": "5cc5df25a193c21608666b05",
            "memberEmail": "JonDoe2@company.com"
          },
          {
            "memberId": "5cc5df25a193c21608666b06",
            "memberEmail": "JonDoe3@company.com"
          }
        ]
      }
    ]
  },
  {
    "_id": "5cc5df25a193c21608666b07",
    "departmentName": "Software QA",
    "managerId": "5cc5df25a193c21608666b08",
    "managerEmail": "qamanager@company.com",
    "teams": [
      {
        "teamName": "QA Team 1",
        "teamLeadId": "5cc5df25a193c21608666b09",
        "teamLeadEmail": "qateam1lead@company.com",
        "teamMembers": [
          {
            "memberId": "5cc5df25a193c21608666b10",
            "memberEmail": "JonDoe4@company.com"
          }
        ]
      },
      {
        "teamName": "QA Team 3",
        "teamLeadId": "5cc5df25a193c21608666b12",
        "teamLeadEmail": "qateam3lead@company.com",
        "teamMembers": [
          {
            "memberId": "5cc5df25a193c21608666b13",
            "memberEmail": "JonDoe4@company.com"
          },
          {
            "memberId": "5cc5df25a193c21608666b14",
            "memberEmail": "JonDoe5@company.com"
          },
          {
            "memberId": "5cc5df25a193c21608666b15",
            "memberEmail": "JonDoe6@company.com"
          }
        ]
      }
    ]
  }
]

您可以筛选没有团队的团队,然后将其映射到筛选空团队的新阵列

首先,您必须筛选那些根本没有团队成员的团队。但是你会被留下没有团队成员的团队。因此,您必须使用.map来仅添加具有团队成员的团队

const filterEmptyTeams=(数据)=>data.filter((部门)=>{
const teams=department.teams.filter((team)=>team.teamMembers.length>0)
返回团队。长度!==0
}).map((部门)=>{
const teams=department.teams.filter((team)=>team.teamMembers.length>0)
返回{…部门,团队}
})
常数数据=[{
“_id”:“5cc5df25a193c21608666b00”,
“部门名称”:“软件开发人员”,
“managerId”:“5cc5df25a193c21608666b01”,
“managerEmail”:swdmanager@company.com",
“团队”:[{
"队伍名称:"社署第一队,,
“团队领导ID”:“5cc5df25a193c21608666b02”,
“teamLeadEmail”:swdteam1lead@company.com",
“团队成员”:[{
“成员ID”:“5cc5df25a193c21608666b03”,
“成员电子邮件”:JonDoe1@company.com"
}]
},
{
“团队名称”:“社会福利署第二团队”,
“团队领导ID”:“5cc5df25a193c21608666b04”,
“teamLeadEmail”:swdteam2lead@company.com",
“团队成员”:[{
“成员ID”:“5cc5df25a193c21608666b05”,
“成员电子邮件”:JonDoe2@company.com"
},
{
“成员ID”:“5cc5df25a193c21608666b06”,
“成员电子邮件”:JonDoe3@company.com"
}
]
}
]
},
{
“_id”:“5cc5df25a193c21608666b07”,
“部门名称”:“软件QA”,
“managerId”:“5cc5df25a193c21608666b08”,
“managerEmail”:qamanager@company.com",
“团队”:[{
“团队名称”:“QA团队1”,
“团队领导ID”:“5cc5df25a193c21608666b09”,
“teamLeadEmail”:qateam1lead@company.com",
“团队成员”:[{
“成员ID”:“5cc5df25a193c21608666b10”,
“成员电子邮件”:JonDoe4@company.com"
}]
},
{
“团队名称”:“QA团队2”,
“团队领导ID”:“5cc5df25a193c21608666b11”,
“teamLeadEmail”:qateam2lead@company.com",
“团队成员”:[]
},
{
“团队名称”:“QA团队3”,
“团队领导ID”:“5cc5df25a193c21608666b12”,
“teamLeadEmail”:qateam3lead@company.com",
“团队成员”:[{
“成员ID”:“5cc5df25a193c21608666b13”,
“成员电子邮件”:JonDoe4@company.com"
},
{
“成员ID”:“5cc5df25a193c21608666b14”,
“成员电子邮件”:JonDoe5@company.com"
},
{
“成员ID”:“5cc5df25a193c21608666b15”,
“成员电子邮件”:JonDoe6@company.com"
}
]
}
]
},
{
“_id”:“5cc5df25a193c21608666b16”,
“部门名称”:“软件创意”,
“managerId”:“5cc5df25a193c21608666b17”,
“managerEmail”:swcmanager@company.com",
“团队”:[]
},
{
“_id”:“5cc5df25a193c21608666b18”,
“部门名称”:“软件BA”,
“managerId”:“5cc5df25a193c21608666b19”,
“managerEmail”:swbamanager@company.com",
“团队”:[{
“团队名称”:“BA团队1”,
“teamLeadId”:“5cc5df25a193c21608666b20”,
“teamLeadEmail”:bateam3lead@company.com",
“团队成员”:[]
}]
}
];

log(filterEmptyTeams(data))
您可以减少数组,并使用递归方法检查并返回嵌套属性的数组

函数
filter
获取数据数组和嵌套属性的键数组。如果所需密钥的数组中有一些项,则返回一个包含项的数组

如果有更多的键可用,将移交并检查带有数组的实际属性。如果结果不是空数组,则获取实际对象的副本以及过滤结果,并将此对象推送到结果集

如果没有更多可用的关键点,则结果集将采用未更改的对象

函数过滤器(数组,[键,…键]){
返回数组.reduce((r,o)=>{
if(o[key]&&o[key].length){
if(键长度){
var temp=过滤器(o[键],键);
if(temp.length)r.push(Object.assign({},o,{[key]:temp}));
}否则{
r、 推(o);
}
}
返回r;
}, []);
}
var data=[{u id:“5cc5df25a193c21608666b00”,部门名称:“软件开发”,经理id:“5cc5df25a193c21608666b01”,经理邮件:swdmanager@company.com,团队:[{团队名称:“社会福利署团队1”,团队领导ID:“5cc5df25a193c21608666b02”,团队领导电子邮件:swdteam1lead@company.com,团队成员:[{成员ID:“5cc5df25a193c21608666b03”,成员电子邮件:"JonDoe1@company.com“}]},{teamName:“社会福利署第二队”,teamLeadId:“5cc5df25a193c21608666b04”,teamLeadEmail:swdteam2lead@company.com,团队成员:[{memberId:“5cc5df25a193c21608666b05”,membe