如何根据嵌套在json中的条件过滤复杂的json



我有一个复杂对象数组,需要根据多种条件进行筛选

var myList= [
{
"UserId": 1,
"UserDetails": {
"Department": [
{
"Name": "dept1"
}
],
"Projects": [
{
"Name": "Project1"
},
{
"Name": "Project2"
}
]
}
},
{
"UserId": 2,
"UserDetails": {
"Department": [
{
"Name": "dept2"
}
],
"Projects": [
{
"Name": "Project3"
},
{
"Name": "Project4"
}
]
}
},
{
"UserId": 3,
"UserDetails": {
"Department": [
{
"Name": "dept3"
}
],
"Projects": [
{
"Name": "Project5"
},
{
"Name": "Project6"
}
]
}
}
]

我想在两个条件下筛选任一部门-->名称是";dept3";或者存在名为->quot;Project3";

var filteredElements=this.myList.filter((x)=>x.UserDetails.filter((y)=>y.Department... ??

如何编写代码来筛选这两个条件?

满足条件

  1. 用户属于一个部门";dept3";

    user.UserDetails.Department.some(department => department.Name == "dept3")

  2. 有一个名为";Project3";

    user.UserDetails.Projects.some(project => project.Name == "Project3")

现在将其链接在一起,

var filteredElements = this.myList.filter(user => 
user.UserDetails.Department.some(department => department.Name == "dept3") || 
user.UserDetails.Projects.some(project => project.Name == "Project3"))
myList.filter(i => i.UserDetails.Department.some(d => d.Name === 'dept3') || i.UserDetails.Projects.some(p => p.Name === 'Project3'))

不能在UserDetails上使用筛选器,因为它不是数组而是对象。

DepartmentProjects上应用find,它们之间存在OR条件,并满足所需条件。

var myList= [
{
"UserId": 1,
"UserDetails": {
"Department": [
{
"Name": "dept1"
}
],
"Projects": [
{
"Name": "Project1"
},
{
"Name": "Project2"
}
]
}
},
{
"UserId": 2,
"UserDetails": {
"Department": [
{
"Name": "dept2"
}
],
"Projects": [
{
"Name": "Project3"
},
{
"Name": "Project4"
}
]
}
},
{
"UserId": 3,
"UserDetails": {
"Department": [
{
"Name": "dept3"
}
],
"Projects": [
{
"Name": "Project5"
},
{
"Name": "Project6"
}
]
}
}
]

var filteredElements = myList.filter(x =>x.UserDetails.Department.find(d => d.Name == "dept3") || x.UserDetails.Projects.find(p => p.Name == "Project3"))
console.log(filteredElements)

最新更新