Javascript JS-过滤对象的嵌套数组
示例JSON数据: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",
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