Quiero filtrar mis datos de una gran matriz JSON, para filtrar estamos usando diferentes parámetros como Género, Compañía, etc. Esta es una matriz de filtros que se pasará a los datos filtrados.

filteredArray={gender:[],company:[],job_title:[],location:[],department:[]}; 

y esta es la función a la que se llama cuando marco o desmarco algunas casillas de verificación en los filtros.

  onSelectFilter(event, type, value){ console.log(event.checked, type, value); if(event.checked){ if(this.filteredArray.gender == type){ this.filteredArray.gender.push(value); } //if condition same for location. company etc }else if(event.checked){ if(this.filteredArray.gender == type){ var index = this.filteredArray.gender.indexOf(value); if (index !== -1) this.filteredArray.gender.splice(index, 1); } //if condition same for location. company etc } } 

Aquí: event.checked será verdadero / falso, el type es género, compañía, etc. y el value es «masculino» o «abc», etc. Cuando desmarque, dependerá del type , se eliminará un value particular.

después de marcar o desmarcar, se obtendrá la salida deseada:

 filteredArray={gender:["male"],company:["x","y"],job_title:[],location:["abc","88u","lki"],department:[]}; 

Esa función en SelectFilter () no es buena, ¿hay alguna buena manera de hacerlo? Gracias por tu ayuda.

esta es la salida json después de seleccionar la casilla de verificación de género como «Masculino» y el resto de parámetros como empresa, departamento, etc. no están seleccionados en la casilla de verificación

 [ { "id": 1, "first_name": "Hardy", "last_name": "Shakelade", "email": "hshakelade0@reuters.com", "gender": "Male", "avatar": "http://dummyimage.com/194x108.jpg/dddddd/000000", "location": "Çepan", "company": "Jabberstorm", "job_title": "VP Product Management", "department": "Marketing" }, { "id": 2, "first_name": "Joshua", "last_name": "Ketton", "email": "jketton1@google.it", "gender": "Male", "avatar": "http://dummyimage.com/181x224.jpg/ff4444/ffffff", "location": "Chemin Grenier", "company": "Trupe", "job_title": "Staff Scientist", "department": "Research and Development" }........] 

Hay un par de problemas que recogí en su implementación al leerlo la primera vez.

  1. if condiciones parecen ser incorrectas, está tratando de verificar this.filteredArray.gender == type pero type es una cadena y filteredArray.gender es una matriz, por lo que nunca serán iguales. Creo que lo que quería comprobar aquí era if (type === "gender")

  2. La condición en la parte else if es la misma que la condición if original. Ambos están comprobando si event.checked es verdadero. Supongo que pretendía verificar ese event.checked === false en el else if condition?

Basado en lo que entendí de la pregunta, se me ocurrió la siguiente implementación que solo está ligeramente modificada de la suya:

 const onSelectFilter = (event, type, value) ={amp}gt; { if(event.checked){ if (type === "gender"){ this.filteredArray.gender.push(value); } if (type === "company") { this.filteredArray.company.push(value); } if (type === "job_title") { this.filteredArray.job_title.push(value); } //... } else if (event.checked === false) { if(type === "gender"){ const index = this.filteredArray.gender.indexOf(value); if (index !== -1) { this.filteredArray.gender.splice(index, 1); } } // ... } }