(usando reaccionar js) Estoy tratando de filtrar esta matriz:
[ {gov:"A1", district:"1" , town:"t1", type:"cars factory"}, {gov:"A2", district:"2" , town:"t2", type:"farm"}, {gov:"A1", district:"1" , town:"t1", type:"milk factory"}, {gov:"A1", district:"4" , town:"t3", type:"milk factory"}, {gov:"A3", district:"3" , town:"t4", type:"medicine factory"}, {gov:"A4", district:"6" , town:"t5", type:"food"}, {gov:"A3", district:"7" , town:"t4", type:"milk factory"}, {gov:"A2", district:"2" , town:"t7", type:"construction"}, ]digamos que esta matriz se llama Ubicaciones, necesito implementar 4 filtros, el primer filtro está filtrando usando gov (gobernaciones), el segundo filtro está usando distritos, el tercero usando ciudades, por último usando el tipo de industria. Pero qué pasa si ya elegí filtrar por distritos, entonces quiero filtrar el tipo de industria dentro de este distrito, necesito hacerlo dinámicamente; Por lo tanto, implementé 4 entradas seleccionadas (gobierno, distrito, ciudad, tipo), siempre podría haber filtrado la matriz original, pero esto devolverá, por ejemplo, las fábricas de leche en todos los gobiernos todo el tiempo, en lugar de un gobierno específico. Entonces, lo que necesito es filtrar en función de más de un atributo o propiedad y no solo escribiéndolo estáticamente
newArray=Locations.filter( (e)=>{ return e.gov=='A1' && e.type='milk factory'})esto lo resuelve, pero no todo el tiempo, ya que también podría elegir filtrar fábricas de leche en un distrito, ciudad o incluso en todo el país específico (en la matriz principal)
supongamos que
gov \\is the value of the selection of governorates district \\is the value of the selection of districts town \\is the value of the selection of towns type \\is the value of the selection of the typepor cierto, estoy usando el mapa del folleto de reacción para mostrar estos valores en los marcadores, es por eso que necesito filtrar.
Así que pensé en publicarlo aquí, tal vez un alma amable me ayudaría a resolverlo. Gracias chicos.
Puede utilizar el siguiente enfoque. La idea es tener todos los filtros en un objeto coincidente y luego llamar a filterData cada vez que cambie el matchObj :)
const data = [ {gov:"A1", district:"1" , town:"t1", type:"cars factory"}, {gov:"A2", district:"2" , town:"t2", type:"farm"}, {gov:"A1", district:"1" , town:"t1", type:"milk factory"}, {gov:"A1", district:"4" , town:"t3", type:"milk factory"}, {gov:"A3", district:"3" , town:"t4", type:"medicine factory"}, {gov:"A4", district:"6" , town:"t5", type:"food"}, {gov:"A3", district:"7" , town:"t4", type:"milk factory"}, {gov:"A2", district:"2" , town:"t7", type:"construction"}, ]; const filterData = (matchObj) => { const matchEntries = Object.entries(matchObj); return data.filter(item => { return matchEntries.every(([key, val]) => item[key] === val); }); }; // Tests: const matchObj1 = { gov:"A1" }; console.log(matchObj1, filterData(matchObj1)); const matchObj2 = { gov:"A1", type: "milk factory" }; console.log(matchObj2, filterData(matchObj2)); const matchObj3 = { gov:"A1", type: "milk factory", town: "t3" }; console.log(matchObj3, filterData(matchObj3));