Tengo una serie de objetos complejos que necesito filtrar en función de varias condiciones.
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" } ] } } ]Quiero filtrar en dos condiciones: Departamento-->El nombre es "dept3" o existe un proyecto con Nombre->"Proyecto3"
var filteredElements=this.myList.filter((x)=>x.UserDetails.filter((y)=>y.Department... ??¿Cómo puedo escribir código para filtrar estas dos condiciones?
myList.filter(i => i.UserDetails.Department.some(d => d.Name === 'dept3') || i.UserDetails.Projects.some(p => p.Name === 'Project3'))
Para satisfacer la condición
el usuario pertenece a un departamento "dept3"
user.UserDetails.Department.some(department => department.Name == "dept3")
hay un proyecto llamado "Proyecto3"
user.UserDetails.Projects.some(project => project.Name == "Project3")
Ahora encadenándolo,
var filteredElements = this.myList.filter(user => user.UserDetails.Department.some(department => department.Name == "dept3") || user.UserDetails.Projects.some(project => project.Name == "Project3"))No puede usar el filtro en UserDetails ya que no es una matriz sino un objeto.
Aplicar find en Department y Projects con condición OR entre ellos con la condición requerida.
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)