如何根据 json 中嵌套的条件过滤复杂的 json?
How filter complex json on condition nested in 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"
}
]
}
}
]
我想在两个条件下进行过滤:Department-->Name 是“dept3”,或者存在一个名称为“Project3”的项目
var filteredElements=this.myList.filter((x)=>x.UserDetails.filter((y)=>y.Department... ??
如何编写代码来过滤这两个条件?
您不能在 UserDetails
上使用过滤器,因为它不是数组而是对象。
在 Department
和 Projects
上应用 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)
满足条件
用户属于部门“dept3”
user.UserDetails.Department.some(department => department.Name == "dept3")
有一个名为“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'))
我有一个复杂对象数组,需要根据多个条件进行过滤
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"
}
]
}
}
]
我想在两个条件下进行过滤:Department-->Name 是“dept3”,或者存在一个名称为“Project3”的项目
var filteredElements=this.myList.filter((x)=>x.UserDetails.filter((y)=>y.Department... ??
如何编写代码来过滤这两个条件?
您不能在 UserDetails
上使用过滤器,因为它不是数组而是对象。
在 Department
和 Projects
上应用 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)
满足条件
用户属于部门“dept3”
user.UserDetails.Department.some(department => department.Name == "dept3")
有一个名为“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'))